12345678910111213141516171819202122232425262728293031 |
- package com.sf.javase.thread;
- import java.util.concurrent.Callable;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.FutureTask;
- public class MyThread3 implements Callable<String> {
- // 此时是call方法
- @Override
- public String call() throws Exception {
- Thread.sleep(2000);
- return "hello callable";
- }
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- // Callable Future
- Callable<String> callable = new MyThread3();
- // 用来接收callable执行的结果
- FutureTask<String> futureTask = new FutureTask<>(callable);
- // 相当于把FutureTask作为Runnable传给Thread
- // 所以Thread执行run()方法时 执行的是FutureTask的run()方法
- // 而FutureTask的run()方法 又调用了Callable的call()方法
- // 所以最终效果是 call()才是真正的线程执行逻辑
- Thread thread = new Thread(futureTask);
- thread.start();
- // 通过get 接收结果 是一种阻塞的等待
- String result = futureTask.get();
- System.out.println(result);
- }
- }
|