2010-01-05 3 views
4

배경을 만들고 싶습니다. 스레드가 일부 작업 (Runnable)을 처리하고 게시 된 순서대로 실행합니다.자바의 이벤트 스레드

중요 : 이러한 태스크는 이벤트 디스패처 스레드에서 실행하지 않아야합니다.

뭔가 같은 :

BackgroundEventThread backgroundEventThread = new BackgroundEventThread(); 

후, 이상 및 코드의 많은 곳에서 :

Runnable thingToDo = new Runnable(){...}; 

backgroundEventThread.executeThis(thingToDo); 
//the things to do will be executed in the order in which they are posted. 

클래스 BackgroundEventThread 코드에 매우 간단해야하지만, 나는 그런 경우 궁금 해서요 클래스가 이미 JDK 또는 일부 공용 라이브러리에서 나에게 알려지지 않은 장소에 존재했다 ...

EDIT : 할 이 스레드에서 실행할 작업 수를 미리 알지 못합니다.

내가 할 수 :

  • task0 (정말 짧은) +1
  • task2 (짧은)을 (... 긴 처리)
  • 작업 1 T0에서 일어나는 T0에서 일어나고 T0에서 일어나고을 + 5 초 등
  • task3 (등, 등)

그리고 나는 (내가 사전에 모르는) task2 필요 작업 1 후 실행하기 위해, d 나는이 모든 일들을 가능한 빨리 수행하기를 원합니다.

EDT에 게시 된 작업과 완전히 같지만 EDT에 게시 된 작업과 정확히 같습니다.

답변

4

java.util.concurrent.ThreadPoolExecutor과 같은 소리입니다.

단일 스레드의 "풀"을 사용하여이를 설정할 수 있으며 실행을 위해 실행할 수 있습니다.

+2

btw, SwingWorker는 정확히 ThreadPoolExecutor를 내부적으로 사용합니다. 오직 그것만이 최대 스레드를 정의하는 상수를가집니다. – Bozho

2

확인 SwingWorker

전용 스레드에서 GUI와 교환하는 시간이 걸리는 작업을 수행 할 수있는 추상 클래스입니다.

사용 방법에 대한 모든 필수 세부 정보는 javadoc에 있습니다.

+1

'SwingWorker'는 실행 순서를 보장합니까? –

+0

정확하게 찾고있는 것이 아닙니다. - EDT와의 상호 작용이 필요 없습니다. - 내 작업이 짧으며 언제든지 만들 수있는 태스크가 많습니다. 따라서 많은 스윙 작업자가 필요하며 모든 작업자가 동일한 배경 스레드를 공유 할 수는 없습니다. –

+0

그것은 비동기식이므로 실행 순서가 없습니다 (정확하게 질문을하면). 두 개의 후속 작업을 백그라운드에서 수행하려면 각 순차 작업을 실행하는 두 개의 도우미 클래스가있는 스윙 작업자 한 명을 사용하십시오. 또한, ThreadPoolExecutor를 통해 비동기 스레드의 수를 제어 할 수 있다고 생각합니다. – Bozho

2

ExecutorService을 구성하여 필요한 작업을 정확하게 수행 할 수 있어야합니다.