Novato con pool de threads
Hola a todos.
Estoy intentando hacer un pool de threads usando wait y notify para parar y reanudar los threads cuando quiera. Este seria mi codigo:
public class Hilo extends Thread implements Runnable{
public boolean listo = false;
//private Grupo miGrupo;
private int miPosicion;
public Hilo(int i, Grupo g){
//miGrupo = g;
miPosicion = i;
}
public void run(){
int i = 0;
while (true){
while (!listo){
try{
synchronized (this){
wait();
}
} catch(InterruptedException e){
System.err.println("Interrupcion");
}
}
System.out.println("Hola " + i);
i++;
listo=false;
}
}
}
-------------------------------------------------------------------------------
public class Grupo {
private Hilo[] pool;
public Grupo(int num){
int i;
pool = new Hilo[num];
for (i=0; i<num; i++){
pool[i] = new Hilo(i, this);
pool[i].start();
}
}
public void reiniciar(){
pool[0].listo=true;
pool[1].listo=true;
synchronized (this){
notifyAll();
}
}
}
-------------------------------------------------------------------------------
public class Externo {
public static void main(String[] args) {
int i=0;
Grupo g = new Grupo(2);
g.reiniciar();
}
}
El resultado es:
Hola 0
Hola 0
Pero por mas veces que llame a reiniciar, los threads ya no se mueven más. Curiosamente, haciendo un debug no parecen llegar ni siquiera a "Hola 0".
A lo mejor es una tontería, pero no tengo demasiado experiencia en estos temas.
Gracias por cualquier ayuda.
Estoy intentando hacer un pool de threads usando wait y notify para parar y reanudar los threads cuando quiera. Este seria mi codigo:
public class Hilo extends Thread implements Runnable{
public boolean listo = false;
//private Grupo miGrupo;
private int miPosicion;
public Hilo(int i, Grupo g){
//miGrupo = g;
miPosicion = i;
}
public void run(){
int i = 0;
while (true){
while (!listo){
try{
synchronized (this){
wait();
}
} catch(InterruptedException e){
System.err.println("Interrupcion");
}
}
System.out.println("Hola " + i);
i++;
listo=false;
}
}
}
-------------------------------------------------------------------------------
public class Grupo {
private Hilo[] pool;
public Grupo(int num){
int i;
pool = new Hilo[num];
for (i=0; i<num; i++){
pool[i] = new Hilo(i, this);
pool[i].start();
}
}
public void reiniciar(){
pool[0].listo=true;
pool[1].listo=true;
synchronized (this){
notifyAll();
}
}
}
-------------------------------------------------------------------------------
public class Externo {
public static void main(String[] args) {
int i=0;
Grupo g = new Grupo(2);
g.reiniciar();
}
}
El resultado es:
Hola 0
Hola 0
Pero por mas veces que llame a reiniciar, los threads ya no se mueven más. Curiosamente, haciendo un debug no parecen llegar ni siquiera a "Hola 0".
A lo mejor es una tontería, pero no tengo demasiado experiencia en estos temas.
Gracias por cualquier ayuda.