코드 사본은 다음과 같습니다.
패키지 com.yao;
java.util.concurrent.callable import;
import java.util.concurrent.executionException;
import java.util.concurrent.executorservice;
java.util.concurrent.executors import;
java.util.concurrent.future import;
import java.util.concurrent.scheduledExecutorService;
java.util.concurrent.timeUnit import;
/**
* 새로운 작업 실행 아키텍처.
* Java 5.0 이전에 스레드 클래스의 start () 메소드를 호출하여 작업이 시작되었습니다.
* 작업 제출 및 실행은 동시에 수행됩니다.
* 또는 동시에 실행 된 스레드 수를 제어하려면 완료해야합니다.
* 5.0은 작업 실행을 쉽게 예약하고 제어 할 수있는 새로운 작업 실행 아키텍처를 제공합니다.
* 작업을 수행하기 위해 데이터베이스 연결 풀과 유사한 스레드 풀을 설정할 수 있습니다.
*이 아키텍처는 주로 3 개의 인터페이스와 해당 특정 클래스로 구성됩니다.
*이 세 인터페이스는 Executor, ExecutorService 및 ScheduleDexecutorService입니다.
* (1) 실행자 인터페이스 : 런닝 가능한 작업을 실행하는 데 사용되며 하나의 메소드 만 정의합니다.
* 실행 (runnable 명령) : Ruannable 유형 작업을 실행합니다
* (2) ExecutorService : 집행자 방법을 상속하고 호출 가능한 작업을 실행하고 작업 실행을 중단시키는 서비스를 제공합니다.
* 정의의 주요 방법은 다음과 같습니다.
* 제출 (작업) : 전화 가능 또는 실행 가능한 작업을 제출 하고이 작업을 나타내는 미래 개체를 반환하는 데 사용할 수 있습니다.
* invokeall (작업 모음) : 작업 모음을 채우고 이러한 작업을 나타내는 미래의 개체 모음을 반환합니다.
* shutdown () : 제출 된 작업을 완료 한 후 서비스를 닫고 더 이상 새로운 작업을 수락하지 않습니다.
* shutdownnow () : 모든 실행 작업을 중지하고 서비스를 닫습니다.
* isterminated () : 모든 작업이 실행되었는지 테스트합니다.
* isshutdown () : ExecutorService가 닫혀 있는지 테스트하십시오
* (3) ScheduleDexecutorService : executorService를 상속 받고 시간에 따라 작업 예약 기능을 제공합니다.
* 일정 (작업, 초기) : InitDelay가 지정된 시간 후에 제출 된 전화 가능 또는 달리기 가능한 작업을 예약하십시오.
* scheduleatfixedrate () : 지정된 간격으로 반복적으로 실행하도록 제출 된 런닝 가능한 작업을 예약하십시오.
* schedulewithfixedDelay () : 제출 된 런닝 가능한 작업을 각 실행 후에 반복적으로 실행할 예정, 지연으로 지정된 시간을 기다리십시오.
*
* 집행자 클래스를 통해 다양한 서비스 객체를 얻습니다.
* Callable (실행 가능한 작업) : 실행 가능한 작업을 호출 가능한 작업으로 변환합니다
* NewsingLethreadExecutor : ExecutOrService 객체를 생성합니다.이 객체는 하나 이상의 작업을 실행하는 데 사용될 수 있습니다.
* NewCachedThreadPool () : 스레드 풀의 크기가 필요한 경우 실행 풀의 크기를 생성합니다.
* NewFixedThreadPool (int poolsize) : 실행자 서비스 객체를 생성합니다.이 객체는 Size Poolsize의 스레드 풀이 Poolsize보다 큰 경우 순서 대기열에서 실행됩니다.
* NewsingLethreadScheduledExecutor : ScheduleDexecutorService 객체를 생성하고,이 객체의 스레드 풀 크기는 1입니다. 둘 이상의 작업이 있으면 작업이 순서대로 실행됩니다.
* NewsCheduledThreadPool (int poolsize) : ScheduleDexecutorService 객체를 생성하면이 객체의 스레드 풀 크기가 풀 사이즈보다 크면 큐에서 실행을 대기합니다.
*/
공개 클래스 집행 검색 {
/**
*이 스레드는 문자열을 출력합니다
*/
공개 정적 클래스 신화를 구현할 수있는 {
public void run () {
System.out.println ( "작업 반복." + System.CurrentTimeMillis ());
노력하다 {
Thread.sleep (1000);
} catch (InterruptedException e) {
System.out.println ( "작업 중단"
+ System.CurrentTimeMillis ());
}
}
}
/**
* 호출 가능은 다른 작업을 종료합니다
*/
공개 정적 클래스 mycallable 구현 호출 가능 {
개인 미래의 미래;
공개 mycallable (미래 미래) {
이 .future = 미래;
}
public String Call () {
System.out.println ( "작업 취소 ..."
+ + System.CurrentTimeMillis ());
this.future.cancel (true);
"작업 취소!"를 반환합니다.
}
}
/**
* @param args
* @throws executionException
* @Throws InterruptedException
*/
Public STATIC VOID MAIN (String [] args)은 InterruptedException을 던집니다.
executionException {
// 실 풀이있는 ExecutorService 객체를 생성하고 스레드 풀의 크기가 필요에 따라 조정됩니다.
// 스레드가 작업을 실행 한 후 다음 작업을 사용할 수 있도록 스레드 풀로 돌아갑니다.
ExecutorService CachedService = Executors.newCachedThreadPool ();
미래의 MythreadFuture = CachedService.submit (new Mythread ());
미래의 myCallableFuture = CachedService.Submit (New MyCallable (
MythreadFuture));
System.out.println (MyCallableFuture.get ());
System.out.println ( "----------------");
// 실행 가능한 작업을 호출 가능한 작업으로 변환합니다
Callable MythreadCallable = Executor.Callable (New Mythread ());
미래의 MythreadCallableFuture = CachedService.Submit (MythreadCallable);
// 실행 가능한 작업의 경우 호출 가능한 작업으로 변환 한 후 값이 반환되지 않습니다.
System.out.println (MythreadCallableFuture.get ());
CachedService.shutdownnow ();
System.out.println ( "----------------");
// SIRE SIRE POOLSIZE의 스레드 풀이있는 ExecutOrservice 객체를 생성합니다.
// 작업 횟수가 풀 사이즈보다 큰 경우 작업이 순서 대기열에서 실행됩니다.
ExecutorService fixedService = executors.newfixedthreadpool (2);
fixedservice.submit (new Mythread ());
fixedservice.submit (new Mythread ());
// 스레드 풀 크기가 2이므로 후속 작업은 실행되기 전에 이전 작업이 실행될 때까지 기다려야합니다.
MythreadFuture = FixedService.submit (new Mythread ());
MyCallableFuture = FixedService.Submit (New MyCallable (MythreadFuture));
System.out.println (MyCallableFuture.get ());
fixedservice.shutdownnow ();
System.out.println ( "----------------");
// ScheduleDexecutorService 객체를 생성하면이 객체의 스레드 풀 크기는 풀 사이즈입니다.
// 작업 횟수가 풀 사이즈보다 큰 경우 작업이 큐에서 실행을 기다립니다.
ScheduleDexecutorService 고정 된ScheduledService = executors
.newscheduledthreadpool (2);
// 새 작업 생성 1
Mythread Task1 = new Mythread ();
// 작업 실행 서비스를 사용하여 즉시 작업 1을 실행 한 다음 2 초마다 작업 1을 실행합니다.
MythreadFuture = FixedScheduledService.scheduleatfixedrate (task1, 0, 2,
TimeUnit.seconds);
// 새 작업 생성 2
mycallable task2 = new mycallable (MythreadFuture);
// 작업 실행 서비스를 사용하여 작업 2를 실행하기 전에 5 초 동안 대기합니다. 실행 후 작업 1이 닫힙니다.
myCallableFuture = 고정 체질화 된service.schedule (task2, 5,
TimeUnit.seconds);
System.out.println (MyCallableFuture.get ());
fixedscheduledservice.shutdownnow ();
}
}