Java의 실행 가능, 호출 가능, 미래, 미래, ExecutorService, ExecutorService, ExectorService, ExectorService, Excetor, Excutors 및 ThreadPoolexcetor는 이러한 키워드와 사용법을 요약합니다.
먼저 분류하십시오.
실행 가능하고 호출 가능
미래, FutureTask
ExecutorService, Excetor, Excutors, ThreadPoolexcetor
1. 달성 가능하고 부를 가능성에 대해
우선, Java에서 스레드를 만드는 세 가지 방법이 있습니다.
세 가지 구현의 장점과 단점 :
스레드를 상속하기 때문에 다른 클래스는 상속 될 수 없으며 현재 스레드를 얻을 수 있습니다.
실행 가능 인터페이스, 리턴 값 없음, 현재 스레드를 가져옵니다 .CurrentThread ()
Callable 인터페이스를 구현하면 Future.get ()을 통해 리턴 값을 얻을 수 있으며 현재 스레드를 가져옵니다 .CurrentThread ()
스레드 상속, 두 단계 :
클래스 Demothread는 스레드 {@override public void run () {super.run (); // 시간이 많이 걸리는 작업을 수행합니다 ...}} demothread t = new demothread (); t.start ();실행 가능을 구현하려면 일반적으로 다음과 같이 사용하십시오.
새 스레드 (new Runnable () {@override public void run () {// do do something}}). start ();단순성을 위해.
위의 두 가지 방법에서 스레드 실행 결과를 얻는 것은 매우 번거 롭고 직접 얻을 수 없습니다. JDK1.5는 Callable, Callable 's Call () 메소드를 추가하여 값을 반환하고 예외를 던집니다. Callable은 계산 결과로로드 된 미래의 객체를 반환 할 수 있습니다.
호출 가능한 소스 코드 :
public interface callable <v> {v call ()는 예외를 던지려고합니다;}호출 가능의 기본 사용 :
FutureTask <integer> futuretask = new FutureTask <integer> (new Callable <integer> () {@override public integer call ()은 예외를 {// return null;}}); 스레드 스레드 (futuretask); thread.start (); integer result = futuretask.get (futuretask.get);호출 가능한 작업을 실행하면 미래의 객체를 얻고 get () 미래의 메소드를 통해 스레드에 의해 실행되는 리턴 값을 얻을 수 있습니다. 그럼 ... 미래,
FutureTask와 사용 방법의 차이점은 무엇입니까?
-> 다음 ()
2. 미래와 FutureTask에 대해
스레드의 실행 결과를 얻기 위해 Future의 FutureTask가 소개되었습니다. 그렇다면 그들의 관계는 무엇이며 그것을 사용하는 방법은 무엇입니까?
향후 수업은 java.util.concurrent 패키지 아래에 있으며 인터페이스입니다.
공개 인터페이스 미래 <v> {부울 취소 (부울 mayinterruptifrunning); 부울 iscancelled (); 부울 isdone (); v get ()는 InterpruptedException, executionException을 던졌습니다. v get (긴 타임 아웃, TimeUnit Unit)은 InterruptedException, executionException, timeoutException을 던지는 것입니다.}미래는 5 가지 방법을 정의합니다.
1) 부울 취소 (부울 Mayinterruptifrunning) :이 작업의 실행을 취소하려고 시도합니다. 작업이 완료되었거나 취소되었거나 다른 이유로 취소 할 수없는 경우이 시도는 실패합니다. 취소 ()가 호출되면 통화가 성공하고 작업이 시작되지 않으면 작업이 실행되지 않습니다. 작업이 시작된 경우 MayinterRupRifrunning 매개 변수는 작업을 실행하는 스레드가 작업을 중지하려는 방식으로 중단되어야하는지 여부를 결정합니다. 이 메소드가 반환되면 isdone ()에 대한 후속 호출은 항상 true를 반환합니다. 이 메소드가 true를 반환하면 iscancelled ()에 대한 후속 호출은 항상 true를 반환합니다.
2) 부울 iscancelled () : 정상적으로 완료되기 전에 작업이 취소되면 true를 반환합니다.
3) 부울 isdone () : 작업이 완료된 경우 TRUE를 반환합니다. 이것은 정상 종료, 예외 또는 취소로 인해 수행 될 수 있습니다. 이러한 모든 경우 에이 방법은 true를 반환합니다.
4) v get ()가 중단 exception, executionException을 던지십시오 : 필요한 경우 계산이 완료 될 때까지 기다린 다음 결과를 얻습니다.
5) v get (긴 타임 아웃, 시간 유닛 단위)는 인터럽트 exception, executionException, timeoutException을 던지십시오 : 필요한 경우, 주어진 시간 후에 최대 기다려 계산을 완료하고 결과를 얻습니다 (결과를 사용할 수있는 경우).
일반적으로 Future는 세 가지 기능을 제공합니다.
작업이 완료되었는지 여부를 결정하십시오.
작업을 방해하는 능력;
작업 실행 결과를 얻을 수 있습니다.
핵심 사항 :
RunnableFuture는 Runnable 인터페이스와 미래 인터페이스를 상속하는 반면 FutureTask는 RunnableFuture 인터페이스를 구현합니다.
FutureTask 구현 :
공개 클래스 FutureTask <v>는 runnablefuture <v>를 구현합니다
RunnableFuture 인터페이스 구현 :
공개 인터페이스 runnableFuture <v>는 runnable, future <v> {void run ();} 확장됩니다.FutureTask는 미래의 인터페이스의 고유 한 구현 클래스입니다.
FutureTask를 스레드로 포장하는 것 외에도 사용하는 또 다른 방법이 있습니다.
executorService executor = executors.newCachedThreadPool (); futureTask <integer> futuretask = new futuretask <integer> (new Callable <integer> () {@override public integer call ()는 예외 {// return null;}}); 집행자 프레임 워크가 여기에서 사용됩니다.
-> 다음 ();
3. ExecutorService, Excetor, Excutors, ThreadPoolexcetor에 대해
Executor 프레임 워크는 Java 5에서 소개되었습니다. Executor Framework는 정책 호출, 일정, 실행 및 제어를 실행하는 비동기 작업을 실행하는 프레임 워크입니다.
집행자 프레임 워크에 대해 이야기하기 전에 새로운 개념 인 ThreadPooleExecutor를 소개해야합니다.
Public ThreadPooleExecutor (intcorepoolsize, int maximumpoolsize, long keepalivetime, timeUnit init, blockingqueue <runnable> workqueue, strandfactory strookfactory, 거부 excutionAndler handler)
ThreadPooleExecutor는 집행자 클래스의 기본 구현입니다.
JDK 도움말 문서에는 다음과 같은 구절이 있습니다.
"프로그래머는보다 편리한 Executors Factory Methods Executors.newCachedThreadpool () (자동 스레드 재활용을 수행 할 수있는 무한 스레드 풀), Executor.NewFixedThreadpool (INT) (고정 크기 스레드 풀) 및 Executor.NewsingLethreadEcutor () (단일 배경 스레드)를 사용하는 것이 좋습니다.
그렇다면 ExecutorService, Excetor 및 Excutors는 무엇입니까?
Excetor는 추상 수준의 핵심 인터페이스입니다.
공개 인터페이스 executor {void execute (runnable command);}ExecutorService 인터페이스는 Executor 인터페이스를 확장하고 미래 객체를 반환, 종료, 스레드 풀 등과 같은 메소드를 제공합니다.
공개 인터페이스 executorService 확장 executor {void shutdown (); <T> 미래 <T> 제출 (Callable <T> 작업); <T> Future <T> 제출 (Runnable Task, T result); <t> list <future <t >> invokeall (collection <? extends callable <t >> 작업, 긴 시간, 시간 유닛)이 중단 된 출시를 던집니다.}}집행자는 컬렉션과 유사한 도구 클래스입니다. FixedThreadpool 또는 CachedThreadpool과 같은 다양한 유형의 스레드 풀을 만들 수있는 공장 방법을 제공합니다.
공개 클래스 집행자 {public static executorService newFixedThreadpool (int nthreads) {return new Threads, Nthreads, 0L, TimeUnit.milliseconds, New LinkedBlockingQueue <Runnable> ()); } public static executorService newCachedThreadPool () {return new ThreadPoolexecutor (0, integer.max_value, 60L, TimeUnit.seconds, new Synchronousqueue <Runnable> ()); }}위는 Java 다중 스레드 키워드를 편집 한 것이므로 지저분하지 않습니다.
위의 것은 편집자가 소개 한 Java에서 멀티 스레드 키워드 정렬의 구현입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!