1. 집행자
집행자 클래스는 "도구 클래스"로 간주 될 수 있습니다. JDK1.6 API의 소개 인용 :
이 패키지에 정의 된 ExecutorService, ScheduleDexecutorService 및 Callable 클래스의 공장 및 실제 방법. 이 클래스는 다양한 방법을 지원합니다.
(1) 일반적으로 사용되는 구성 문자열로 ExecutorService를 설정하는 방법을 작성하고 반환합니다.
(2) 일반적으로 사용되는 구성 문자열로 ScheduleDexecutorService를 설정하는 방법을 작성하고 반환합니다.
(3) 구현 별 메소드를 접근 할 수 없음으로써 재구성을 비활성화하는 "랩핑 된"ExecutorService 메소드를 작성하고 반환합니다.
(4) 새로 생성 된 스레드를 알려진 상태로 설정할 수있는 ThreadFactory 방법을 생성하고 반환합니다.
(5) 부패성이없는 호출 방법을 작성하고 반환하여 호출 가능이 필요한 실행 방법에 사용할 수 있도록합니다.
이 클래스를 통해 NewsingLethreadExecutor ()를 호출하여 단일 스레드 ExecutorService를 얻고 NewFixedThreadPool ()을 호출하여 고정 크기의 스레드 풀의 ExecorService를 얻기 위해 여러 가지 스레드 풀 인스턴스를 얻을 수 있습니다. 가장 쉬운 것은이를 사용하여 런닝 가능한 객체를 실행하거나 Callable <T>를 구현하는 일부 개체를 실행할 수 있습니다. stread 's start () 메소드를 사용하여 반환 값이 없습니다. 스레드에서 실행 된 메소드에 리턴 값이 있으면 ExecutorService를 사용하는 것이 좋습니다. 제출 (), invokeall () 또는 invokeany ()를 선택하고 특정 상황에 따라 적절한 메소드를 선택할 수 있습니다.
이 클래스에 제공된 방법 중 일부는 다음과 같습니다.
1.1 Public Static ExecutorService NewCachedThreadpool ()
필요에 따라 새 스레드를 생성하는 스레드 풀을 만듭니다. 그러나 이전에 구성된 스레드를 사용할 수있을 때 재사용합니다. 이 스레드 풀은 일반적으로 많은 단기 비동기 작업을 수행하는 프로그램의 프로그램 성능을 향상시킵니다.
1.2 Public Static ExecutorService NewFixedThreadpool (int nthreads)
공유되지 않은 큐에서 이러한 스레드를 실행하기 위해 고정 된 재사용 가능한 스레드가있는 스레드 풀을 만듭니다.
1.3 공개 정적 ExecutorService NewsingLethreadExecutor ()
단일 작업자 스레드를 사용하여 무한 큐에서 스레드를 실행하는 집행자를 만듭니다.
세 가지 방법 모두 인터페이스 스레드 Factory 인스턴스와 함께 사용할 수 있습니다. ExecutorService 인터페이스의 인스턴스를 반환하십시오.
2. 인터페이스 스레드 factory
필요에 따라 새 스레드 객체를 만듭니다. 스레드 공장을 사용하면 더 이상 새로운 스레드 호출 수동 쓰기가 필요하지 않으므로 응용 프로그램은 특수 스레드 하위 클래스, 속성 등을 사용할 수 있습니다.
이 인터페이스의 가장 간단한 구현은 다음과 같습니다.
클래스 simplethreadfactory emplements strookfactory {public 스레드 newthread (runnable r) {return new Thread (r); }} 3. 인터페이스 ExecutorService
이 인터페이스는 종료를 관리하는 방법을 제공합니다.
4. 표준 스레드 풀 시작 스레드를 만듭니다
4.1 런닝 가능한 인터페이스를 구현하는 간단한 스레드 제공
Mythread.java
패키지 com.zj.concurrency.executors; 공개 클래스 신화는 실행 가능한 {private int count = 1, 숫자; 공개 신화 (int num) {number = num; System.out.println ( "스레드 만들기" + 번호); } public void run () {while (true) {system.out.println ( "스레드-" + 번호 + "run" + count + "time (s)"); if (++ count == 3) 반환; }}} 이 스레드는 해당 생성 및 실행 정보를 인쇄합니다.
4.2 CachedThreadpool을 사용하여 스레드를 시작합니다
Cachedthreadpool.java
package com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; public class cachedthreadpool {public static void main (String [] args) {executorService exec = executors.newCachedThreadPool (); for (int i = 0; i <5; i ++) exec.execute (new Mythread (i)); exec.shutdown (); }} 결과:
스레드 -0create 스레드 -1 스레드 -3thread-0 실행 1 시간 (S) 스레드 -0 스레드 -0 스레드 -0 실
4.3 FixedThreadpool을 사용하여 스레드를 시작하십시오
fixedthreadpool.javapackage com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; public class fixedthreadpool {public static void main (String [] args) {executorService exec = executors.newfixedThreadpool (2); for (int i = 0; i <5; i ++) exec.execute (new Mythread (i)); exec.shutdown (); }} 결과:
스레드 -0create 스레드 -1create 스레드 -2 스레드 -3 크리징 스레드 -4thread-0 실행 1 시간 (S) 스레드 -0 run 2 시간 2 타임 런
4.4 SingleThreadExecutor를 사용하여 스레드를 시작하십시오
SingleThreadExecutor.java
package com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; 공개 클래스 SingleThreadExecutor {public static void main (string [] args) {executorService exec = executors.newsingLethreadExecutor (); for (int i = 0; i <5; i ++) exec.execute (new Mythread (i)); exec.shutdown (); }} 결과:
스레드 -0create 스레드 -1create 스레드 -2 스레드 -3 크리징 스레드 -4thread-0 실행 1 시간 (S) 스레드 -0 실행 2 타임 런
5. Threadfactory 인터페이스의 사용과 협력하십시오
우리는 스레드에 데몬과 우선 순위 속성 설정을 추가하려고합니다.
5.1 배경 스레드 속성을 설정합니다
Daemonthreadfactory.java
package com.zj.concurrency.executors.factory; import java.util.concurrent.threadfactory; 공개 클래스 daemonthreadfactory는 strookfactory {public shread newthread (runnable r) {스레드 t = 새 스레드 (r); T. 세트 데몬 (true); 반환 t; }}
5.2 우선 순위 속성을 설정합니다
maxPriorityThreadFactory.java
package com.zj.concurrency.executors.factory; import java.util.concurrent.threadfactory; 공개 클래스 maxPriorityTheRdreadFactory는 ThreadFactory {public 스레드 newthread (runnable r) {스레드 t = 새 스레드 (r); t.setpriority (thread.max_priority); 반환 t; }} 최소 PriorityMinPriorityThreadFactory.java
package com.zj.concurrency.executors.factory; import java.util.concurrent.threadfactory; public class minpriorityThreadFactory는 ThreadFactory {public 스레드 newthread (runnable r) {스레드 t = 새 스레드 (r); t.setpriority (thread.min_priority); 반환 t; }}
5.3 속성 설정으로 스레드를 시작하십시오
execfromfactory.java
package com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; import com.zj.concurrency.executors.factory.daemonthreadtory; import com.zj.concurrency.executors.mavax.ThormatorityThefreftory; com.zj.concurrency.executors.factory.minpriorityThreadFactory; public class execfromfactory {public static void main (String [] args)은 예외 {executorService defaultexec = executors.newCachedThreadPool (); executorService daemonexec = executors .NewCachedThreadPool (new daemonthreadfactory ()); executorService maxPriorityExec = executors .NewCachedThreadPool (New MaxPriorityThreadFactory ()); executorService minpriorityExec = executors .NewCachedThreadPool (new MinPriorityThreadFactory ()); for (int i = 0; i <10; i ++) daemonexec.execute (new Mythread (i)); for (int i = 10; i <20; i ++) if (i == 10) maxPriorityExec.Execute (new Mythread (i)); else if (i == 11) minpriorityExec.Execute (new Mythread (i)); else defaultexec.execute (new Mythread (i)); }} 결과:
스레드 -0create 스레드 -1 스레드 -3thread-0 실행 1 시간 (S) 스레드 -0 스레드 -0 스레드 -0 실 스레드 -6 스레드 -7thread-7 실행 1 시간 (S) 스레드 -7 실행 2 시간 (S) 2 타임 생성 스레드 -8thread-8 실행 1 타임 (S) 2 타임 생성 2 타임 생성 스레드 -9create 스레드 -10thread-10 런 Time (s) run 1 time-3 run 2 time run 2 time run 2 time stread-13 stread-14thread-12 run 1 time run 2 time (s) 스레드 -13 스레드 -13 run 2 time (s) 스레드 -15thread-15 실행 1 시간 (s) 스레드 -16 시간 (s) stride-16 run 1-16thred-1-16 Thimes 16 Thimes 16 Thine 16 Thine 16 Thine 16 Thine (s). Time (s) 스레드 -17 크리징 스레드 -18 크리징 스레드 -19thread-14 실행 1 시간 (S) 스레드 -14 실행 2 타임 런