자바 병행 프로 그래 밍 학습 의 Future Task

2106 단어 자바
FutureTask
자바 병행 프로 그래 밍 학습 의 세 가지 스 레 드 시작 방식 에서 언급 한 적 이 있 습 니 다.주요 한 방법 은 다음 과 같다.
  • cancel(boolean mayInterrupt IfRunning):작업 을 취소 하 는 데 실 패 했 습 니 다.false 로 돌아 갑 니 다.예 를 들 어 작업 이 끝 났 거나 취소 되 었 거나 취소 되 지 않 습 니 다.실행 에 성공 하면 ture 로 돌아 갑 니 다.mayInterrupt IfRunning 의 역할 은 중단 여부 입 니 다.true 라면 중단 합 니 다.본질 적 으로 interrupt 방법 을 사용 합 니 다
  • isCanceled:퀘 스 트 가 취소 되 었 는 지 판단 합 니 다.퀘 스 트 종료 에는 정상 적 인 실행 종료 또는 이상 종료 가 포함 되 어 true 로 돌아 갑 니 다
  • isDone:실행 종료 여부,정상 적 인 실행 종료 또는 이상 종료 포함.끝내 고 트 루 로 돌아 가..
  • get:반환 값 을 가 져 옵 니 다.반환 값 을 얻 기 전에 계속 차단 합 니 다
  • public class FutureTaskDemo {
        static class Thread1 implements Callable {
    
    
            @Override
            public Object call() throws Exception {
                System.out.println("before fun");
                fun();
                System.out.println("after fun");
                return null;
            }
    
            public void fun() {
                while (true) {
    
                }
            }
        }
    
        public static void main(String[] args) {
            Thread1 thread1 = new Thread1();
            FutureTask futureTask = new FutureTask(thread1);
            Thread thread = new Thread(futureTask);
            thread.start();
            try {
                Thread.sleep(1000);
                System.out.println("cancel:" + futureTask.cancel(true));
                Thread.sleep(1000);
                System.out.println("isCancelled:" + futureTask.isCancelled());
                System.out.println("isDone:" + futureTask.isDone());
                System.out.println(futureTask.get());
            } catch (InterruptedException e) {
                System.out.println("InterruptedException");
            } catch (ExecutionException e) {
                System.out.println("ExecutionException");
            } catch (CancellationException e) {
                System.out.println("CancellationException");
            }
        }
    }

    실행 결 과 는 다음 과 같 습 니 다.작업 이 취소 되 었 기 때문에 CancellationException 이상 을 던 집 니 다.주의해 야 할 것 은 이때 thread 1 스 레 드 가 달리 고 있 습 니 다.isCanceled 와 isDone 은 true 로 돌아 갑 니 다.cancel 은 임 무 를 진정 으로 끝 낼 수 없습니다.

    좋은 웹페이지 즐겨찾기