Tengo una clase Note
y una clase Meeting
. Hay un ArrayList
llamado noteList
en la clase Note
. Cuando se crea un objeto de Meeting
, se registra en el noteList
.cómo iniciar dos hilos al mismo tiempo (o en el momento de cierre)
Solo quiero demostrar en la clase principal que se pueden crear dos objetos de Meeting
al mismo tiempo (o en el momento de cerrarlo). Mi programa es:
public class Note{
//some field and method hier
public void add(Meeting m){
notes.add(m);
}
private static final List<Entry> notes =
Collections.synchronizedList(new ArrayList<Entry>());
}
public class Meeting implements Runnable{
public Meeting(Note note_1,Note note_2,Calendar calendar){
note_1.add(this);
note_2.add(this);}
//some method
}
public class Test implements Runnable{
public static void main(String[] args) {
Note note_1 = new Note();
Note note_2 = new Note();
Meeting m_1 = new Meeting(note_1,note_2);
Meeting m_2 = new Meeting(note_2,note_1)
Thread t1 = new Thread(m_1);
Thread t2 = new Thread(m_2)
t1.start();
t2.start();
}
//t1,t2 are two thread and they start one to one(not at the same time).
He leído en cualquier lugar que wait()
, notify()
o notifyAll()
se puede utilizar, pero debe ser utilizado en un método sincronizado. No tengo métodos sincronizados en mi programa.
En su código como está escrito, 'm_1' siempre se crea (instancia) antes de' m_2' aunque serán tanto existir simultáneamente en memoria hasta que el GC decide limpiarlos. ¿Te refieres a algo más? En cualquier caso, si busca por qué no funciona el doble bloqueo comprobado para singletons obtendrá una muy buena visión general de los problemas de sincronización en Java. – CurtainDog
Creo que falta.Me refiero a cómo se pueden crear m_1 y m_2 (crear instancias) al mismo tiempo (o en el momento del cierre) – echo
Está utilizando métodos sincronizados porque synchronizedList() devuelve una lista que tiene todo su método sincronizado. –