Java는 한 번에 둘 이상의 EDT를 작성할 수 있습니까?둘 이상의 이벤트 발송 스레드 (EDT)를 설정하는 방법이 있습니까?
EDT를 설정하고 내부에 수백 개의 구성 요소가 포함되어있을 가능성이있는 "강력"패널의 내용을 업데이트하는 방법을 실험하고 있습니다. 현재 내가
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
나는 다음과 같은 게시물을 검토 한 결과이 : 등
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
과 .
예를 들어 하나의 EDT가 처리해야하는 12 가지 이벤트가 있다면 자바는 이미 이러한 이벤트를 그룹화/우선 순위 지정하기위한 내부 스케줄링 메커니즘을 가지고 있다는 것을 이해합니다. 내가?
이하 (새의 Runnable() {...} .start()윌 자바를 새로운 Thread와 2 EDT를 만들 경우 자동으로 병합 무엇 그래서 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."
에 따르면
스레드 안전에 대한 두려움에 다시 1-2 EDTs?
new Thread(new Runnable() {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
}).start();
두 번째 스레드는 EDT가 아닙니다.) –
EDT를 만들 수 있다고 생각하지 않습니다. 스윙은 자체 EDT를 만듭니다. 원하는만큼 스레드를 생성 할 수 있지만 (최대 한계까지) EDT가 아닙니다. 예제 코드는'Runnable' 객체를 생성하지만, 당신의 스레드에서'panel.update'를 실행하지 않습니다. 대신,이 객체는 Swing에 주어지며, Swing은 그것을 어딘가에 저장하고, 결국 EDT가 그것을 발견하고 실행합니다. – ajb
[Multiple Event Dispatch Threads]의 가능한 복제본 (http : // stackoverflow.com/questions/7323306/multiple-event-dispatch-threads) – Jayan