Java có thể tạo nhiều hơn một EDT cùng một lúc không?Có cách nào để thiết lập hai hoặc nhiều chuỗi gửi sự kiện (EDT) không?
Tôi đang thử nghiệm thiết lập EDT và cách hoạt động trong việc cập nhật nội dung của bảng điều khiển "nặng" với hàng tá bảng được nhúng bên trong và hàng trăm thành phần hoàn toàn. Hiện nay tôi có
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
Tôi đã nhìn vào bài viết sau đây:
Measuring "busyness" of the event dispatching thread
How does the event dispatch thread work?
Java Event-Dispatching Thread explanation
http://en.wiki2.org/wiki/Event_dispatching_thread
và vân vân .
Tôi hiểu rằng nếu có, nói một tá sự kiện, mà một EDT duy nhất phải xử lý, Java đã có một cơ chế lập kế hoạch nội bộ để nhóm/ưu tiên các sự kiện này.
Theo http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html
"This is necessary because most Swing object methods are not "thread safe": invoking them from multiple threads risks thread interference or memory consistency errors."
Vì vậy, những gì nếu tôi tạo ra một EDT thứ 2 với chủ đề mới (new Runnable() {...} .start() dưới đây?
Will java tự động hợp nhất hai EDTs trở lại một vì sợ an toàn thread?
new Thread(new Runnable() {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
}).start();
Chuỗi thứ hai của bạn không phải là EDT, chỉ T.;) –
Tôi không nghĩ bạn có thể tạo EDT. Swing tạo ra EDT riêng của mình. Bạn có thể tạo bao nhiêu chủ đề tùy thích (lên đến một số giới hạn lớn), nhưng chúng sẽ không phải là của EDT. Mã ví dụ của bạn tạo ra một đối tượng 'Runnable', nhưng nó sẽ không chạy' panel.update' trong chuỗi của bạn. Thay vào đó, đối tượng này được trao cho Swing, nó tiết kiệm nó ở đâu đó, và sau đó cuối cùng EDT tìm thấy nó và chạy nó. – ajb
có thể trùng lặp của [Nhiều chủ đề công văn sự kiện] (http: // stackoverflow.com/questions/7323306/multiple-event-dispatch-threads) – Jayan