Tôi có một lớp Note
và một lớp học Meeting
. Có một số ArrayList
có tên noteList
trong lớp Note
. Khi một đối tượng của Meeting
được tạo, sau đó nó được đăng ký trong noteList
.cách bắt đầu hai chủ đề cùng một lúc (hoặc tại thời điểm đóng)
Tôi chỉ muốn phân giải trong lớp chính có thể tạo hai đối tượng Meeting
cùng một lúc (hoặc vào thời gian gần). chương trình của tôi là:
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).
Tôi đã đọc ở bất cứ đâu mà wait()
, notify()
hoặc notifyAll()
có thể được sử dụng, nhưng chúng phải được sử dụng trong một phương pháp đồng bộ. Tôi không có phương pháp đồng bộ trong chương trình của mình.
Trong mã của bạn như được viết, 'm_1' luôn được tạo (instantiated) trước' m_2' mặc dù cả hai sẽ tồn tại đồng thời trong bộ nhớ cho đến khi GC quyết định xóa chúng. Bạn có ý gì khác không? Trong bất kỳ trường hợp nào nếu bạn tìm kiếm lý do tại sao đôi kiểm tra khóa cho singletons không làm việc bạn sẽ nhận được một tổng quan rất tốt về các vấn đề đồng bộ hóa trong Java. – CurtainDog
Tôi nghĩ rằng có một thiếu.Tôi có nghĩa là làm thế nào có thể m_1 và m_2 được tạo ra (instantiated) cùng một lúc (hoặc tại thời điểm gần) – echo
Bạn đang sử dụng phương pháp đồng bộ vì synchronListList() trả về một danh sách có tất cả các phương pháp của nó đồng bộ. –