2010-08-11 5 views
3

Java Executors가없는 경우, Runnable 작업마다 새 스레드를 만들어야합니다. 새 스레드를 만들려면 스레드 오버 헤드 (작성 및 분리)가 필요합니다.이 오버 헤드는 복잡하지 않고 낭비되는 시간을 비 Executor 프로그램에 추가합니다.자바 - 집행자들에게 어떤 점이 좋을까요?

코드 참조 : - 자바 집행자와

new Thread (aRunnableObject).start(); 

-

자바를 집행 인

Executor executor = some Executor factory method; 
exector.execute (aRunnable); 

결론은 그 추상적 인 실행자 스레드를 관리하는 방법의 낮은 수준의 세부 정보 .

사실입니까?

감사합니다.

+3

왜 당신 자신의 스레드 풀을 작성하는 것이 좋습니다? – krock

답변

9

결론은 Executors가 스레드 관리 방법에 대한 저수준 세부 사항을 추상화한다는 것입니다. 그게 사실이야?

예.

스레드 개체 만들기, 스레드 풀 유지 관리, 실행중인 스레드 수 제어, 정상 종료/정상 종료 등의 문제를 처리합니다. 이러한 일을 손으로하는 것은 결코 쉬운 일이 아닙니다.

편집

이 수도 있고이 일을 ... 완벽 응용 프로그램의 정확한 요구에 조정 된 사용자 정의 구현 와 비교에서 성능 저하하지 않을 수 있습니다.

사용자 정의 구현이 완벽하게 조정되지 않을 것이다
  1. 성능 차이 어쨌든 크지 않을 것이다 : 그러나 기회는있다.

게다가 Executor 지원 클래스를 사용하면 해결해야 할 문제가있는 경우 다양한 매개 변수 (예 : 스레드 풀 크기)를 조정할 수 있습니다. 나는 Executors를 사용함으로써 가비지 콜렉션 오버 헤드가 얼마나 큰 영향을 받는지 보지 못합니다.

일반적으로, 당신은 (예를 들어, 높은 수준의 동시성 지원 클래스를 사용하여) 간단하고 견고하여 응용 프로그램을 작성에 집중해야하고, 경우에만 성능에 대해 걱정 : 응용 프로그램이 너무 느리다 "실행

  1. ",
  2. 프로파일 링 도구는 특정 영역에서 문제가 있음을 알려줍니다.
+0

낮은 수준의 스레드 관리를 처리하므로 실행 프로그램을 사용하기가 더 쉽습니다. 성능에 영향이 있습니까? 내 머리 속에서 생각하고있다. 가비지 컬렉션 :: exec mem mgmt : executor :: thread – BIll

+0

'Executor'는 인터페이스이므로 완벽하게 조정 된 사용자 정의 구현은 사실 'Executor'가 될 수있다. 그런 다음 너무 완벽하게 조정되지 않으면 쉽게 구현을 전환 할 수 있습니다. :) –

+0

감사합니다! 당신은 다 남자 – BIll

1

정상 스레드에 대한 실행 프로그램의 장점 중 몇 가지.

  1. 스레드 풀은 ThreadPools의 크기를 변경하여 쉽게 얻을 수 있습니다. 이렇게하면 응용 프로그램을 통해 흐르는 스레드 수를 제어/확인하는 데 도움이됩니다.하중지지에 대한 벤치마킹을 할 때 특히 유용합니다.
  2. RejectionHandlers를 사용하여 Runnable 작업을보다 잘 관리 할 수 ​​있습니다.
0

나는 집행 할 모든 생각들이 당신을 위해 낮은 수준의 작업 을 할 것입니다,하지만 당신은 여전히 ​​신중하게 당신이 원하는 을 수행하는 스레드 풀을 결정해야합니다. 당신의 유스 케이스가 최대 5 개의 쓰레드를 필요로하고 으로 가고 100 개의 쓰레드 풀을 가진 쓰레드 풀을 사용한다면 확실히 성능에 영향을 미칠 것입니다. 이것 외에 시스템을 정지시킬 낮은 레벨에서 여분의 이 수행되고 있음을 알 수 있습니다. 그리고 마지막으로 의 모든 것이 끝나면, 지하수에 대해 공정한 아이디어를 줄 수 있도록 수준이 낮은 수준에서 진행되고있는 아이디어를 얻는 것이 좋습니다.

관련 문제