2009-12-25 3 views

답변

28

의 차이점은 무엇입니까?

일단 인스턴스가 생기면 Executor 인스턴스를 여러 개 제출하여 차례대로 실행할 수 있습니다. 당신은 원시 Thread으로 간단히 할 수 없습니다. 실행 가능한이 완료되면 당신이 new Thread(someRunnable).start();를 실행할 때 오류 또는 RuntimeException을이이 자동으로 삼켜됩니다 집행 인에 던져 경우

+0

오 그래, 그건 생각조차하지 않았다. 감사. –

11

, 새로운 스레드()

15

하나 개 눈에 띄는 차이를 System.err에 인쇄 할 것입니다 실은 조용히 죽을 것이다.

Executor는 종료 할 때까지 지속됩니다. 따라서 실행 중 Executors.newSingleThreadExecutor().execute(command) 응용 프로그램이나 JVM이 완료되었다고 생각되면 Executor가 백그라운드 스레드에서 실행 중일 수 있습니다.

+0

분명히 사실이 아닙니다. https://www.farside.org.uk/201309/learning_from_bad_code – assylias

+0

재미 있고, 나는 그가 말하는 것을 많이 논할 수 없습니다. 'submit'이 완료된 후에'finalize' 호출을 다시 만들 수 없습니다. 나는 간단한'main' 테스트를 실행했고 위임하는 TPE는 결코 GC 화되지 않았습니다. –

+0

솔직히 테스트하지 않았습니다. – assylias

0

Executors.newSingleThreadExecutor(). execute (command)는 이전에 생성 된 스레드를 재사용합니다. 새 Thread()의 경우처럼 새 스레드를 생성하지 않습니다. 60 초 동안 사용되지 않은 스레드가 종료 된 경우 해당 스레드는 newFixedThreadPool (1)과 동일한 종류의 풀입니다.

0

한 자리 스레드의 경우에도 ExecutorService 또는 ThreadPoolExecutor을 사용하는 것을 선호합니다. 그들은 더 많은 유연성을 제공합니다.

java Fork/Join pool, ExecutorService and CountDownLatch

Java's Fork/Join vs ExecutorService - when to use which?

은 당신이 당신의 자신의 스레드 대신 ExecutorService 시작했다고 가정 :

관련 SE 질문에 ExecutorService & ThreadPoolExecutor 섹션에서보세요. 앞으로 다중 스레드를 지원해야 할 필요가 있다면 ExecutorService 또는 ThreadPoolExecutor이 더 나은 제어 및 유연성을 제공 할 것입니다. 아래 API에서 필요한 수의 매개 변수를 미세 조정할 수 있습니다.

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, 
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, 
RejectedExecutionHandler handler)