私はクラスNote
とクラスMeeting
を持っています。 にnoteList
という名前のArrayList
があります。 Meeting
のオブジェクトが作成されると、noteList
に登録されます。同時に2つのスレッドを開始する方法(または終了時に)
メインクラスで、Meeting
という2つのオブジェクトを同時に(またはクローズ時に)作成できるようにしたいだけです。私のプログラムは次のとおりです。
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).
私はwait()
、notify()
またはnotifyAll()
を使用することができることをどこか読みましたが、彼らは同期の方法で使用する必要があります。自分のプログラムには同期メソッドがありません。
あなたのコードでは、GCは、それらをクリーンアップすることを決定するまで、彼らは両方のメモリに同時に存在することになるもののm_2' ''前に、書かれたm_1'は常に作成(インスタンス化)されます。他に何か意味がありますか?いずれにしても、シングルトンのダブルチェックロックが機能しない理由を検索した場合、Javaの同期に関する問題の概要が非常によくわかります。 – CurtainDog
私は欠けていると思います。私はどのようにm_1とm_2を同時に(インスタンス化して)同時に作ることができるのかを示します。 – echo
synchronizedList()はすべてのメソッドを同期させたリストを返すので、synchronizedメソッドを使用しています。 –