Threads en Java
Buenas.
Estoy desarrollando un pequeño programa en Java para probar los hilos:
PruebaThread.java
public class PruebaThread implements Runnable {
Prueba prueba;
public PruebaThread(Prueba pruebar) {
this.prueba = prueba;
}
public void run() {
// Aqui accedo a prueba.entero o prueba.lista
}
}
Prueba.java
public class Prueba {
int entero;
ArrayList lista;
public void lanzaHilos() {
ThreadGroup threadGroup;
threadGroup = new ThreadGroup("Spider threads");
PruebaThread pruebathread = new PruebaThread(this);
new Thread(threadGroup, pruebathread).start();
PruebaThread pruebathread2 = new PruebaThread(this);
new Thread(threadGroup, pruebathread2).start();
PruebaThread pruebathread3 = new PruebaThread(this);
new Thread(threadGroup, pruebathread3.start();
}
}
Mi pregunta es: Para acceder a prueba.lista o prueba.entero ¿tengo que tener algun cuidado?. Mi idea es que los hilos vayan cogiendo elementos del arraylist lista (como si fuera una cola). Si no encuentran ningun elemento, esperan durante 1 segundo y vuelven a comprobar. ¿Tengo que utilizar synchronize () {} o wait() y notify()? ¿o nada?
Muchas Gracias
Rafa
Estoy desarrollando un pequeño programa en Java para probar los hilos:
PruebaThread.java
public class PruebaThread implements Runnable {
Prueba prueba;
public PruebaThread(Prueba pruebar) {
this.prueba = prueba;
}
public void run() {
// Aqui accedo a prueba.entero o prueba.lista
}
}
Prueba.java
public class Prueba {
int entero;
ArrayList lista;
public void lanzaHilos() {
ThreadGroup threadGroup;
threadGroup = new ThreadGroup("Spider threads");
PruebaThread pruebathread = new PruebaThread(this);
new Thread(threadGroup, pruebathread).start();
PruebaThread pruebathread2 = new PruebaThread(this);
new Thread(threadGroup, pruebathread2).start();
PruebaThread pruebathread3 = new PruebaThread(this);
new Thread(threadGroup, pruebathread3.start();
}
}
Mi pregunta es: Para acceder a prueba.lista o prueba.entero ¿tengo que tener algun cuidado?. Mi idea es que los hilos vayan cogiendo elementos del arraylist lista (como si fuera una cola). Si no encuentran ningun elemento, esperan durante 1 segundo y vuelven a comprobar. ¿Tengo que utilizar synchronize () {} o wait() y notify()? ¿o nada?
Muchas Gracias
Rafa
Te recomiendo que utilices la clase Vector, que es más ineficiente que la clase ArrayList, pero es precisamente porque es segura frente a los hilos y te despreocupes de lo demás.