Ho una classe Note
e una classe Meeting
. C'è un ArrayList
denominato noteList
nella classe Note
. Quando viene creato un oggetto di Meeting
, esso viene quindi registrato nel numero noteList
.come avviare due thread contemporaneamente (o all'ora di chiusura)
Voglio solo dimostrare nella classe principale che due oggetti di Meeting
possono essere creati allo stesso tempo (o al momento della chiusura). Il mio programma è:
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).
Ho letto da nessuna parte che wait()
, notify()
o notifyAll()
possono essere utilizzati, ma devono essere utilizzati in un metodo sincronizzato. Non ho metodi sincronizzati nel mio programma.
Nel codice come scritto, 'm_1' viene sempre creata (istanziato) prima di' m_2' se saranno entrambi presenti contemporaneamente in memoria fino a quando il GC decide di pulirli. Intendi qualcos'altro? In ogni caso, se si cerca perché il blocco a doppio controllo per singleton non funziona, si otterrà un'ottima panoramica dei problemi di sincronizzazione in Java. – CurtainDog
Penso che manchi.Voglio dire come si possono creare m_1 e m_2 (istanziati) allo stesso tempo (o al momento della chiusura) – echo
Si stanno utilizzando metodi sincronizzati perché synchronizedList() restituisce una lista che ha sincronizzato tutto il suo metodo. –