3

가끔씩 이벤트 디스패치 스레드에서 제가 가지고있는 메서드를 호출한다고 가정합니다. 이제 Event Dispatch Thread가 아닌 다른 스레드에서 호출하려고했던 해당 메소드의 일부 코드를 가정 해 보겠습니다.On Event Dispatch Thread --- 꺼내고 싶습니다

EDT 이외의 스레드에서 일부 코드를 실행할 수있는 방법이 있습니까?

 if (SwingUtilities.isEventDispatchThread()) { 
      new Runnable() { 
       @Override 
       public void run() { 
        myMethod(); 
       } 
      }.run(); 
     } else { 
      myMethod(); 
     } 

그러나 MyMethod라는() 나는 새의 Runnable을 만들 경우에도 EDT에서 실행 결국 :

나는이 시도.

EDT 이외의 스레드에서 myMethod()를 실행할 수 있습니까?

+0

'현재 스레드 이름'을 확인할 수 있습니다. 디폴트에서는, EDT thread에 대해서는 AWT-EventQueue-0와 같게됩니다. – Braj

+0

AWT 이벤트 대기열에 있음을 알 수있는 방법을 알고 있습니다. 문제는 AWT Event Queue가 아닌 코드를 실행하기 위해서입니다. –

답변

7

잘하시는군요. 하지만 당신의 Runnable은 새로운 쓰레드로 전달되어야합니다.

new Thread(new Runnable() { 
@Override 
public void run() { 
    myMethod(); 
} 
}).start(); 

"run()"메소드를 호출해도 새 스레드가 시작되지 않습니다. 대신 start()를 사용하십시오.

도 참조 http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html

+0

ExecutorService를 사용하면 장기적으로 쓰레드를 재사용 할 수 있습니다. –