1.有返回值
2.可以抛出异常
3.方法不同,run()/call()
package com.xizi.callable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class callable {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// new Thread(new Runnable() {}).start();
// new Thread(new FutureTask<V>()).start();
// new Thread(new FutureTask<V>( Callable)).start();
MyThread thread = new MyThread();
FutureTask futureTask = new FutureTask(thread);
new Thread(futureTask,"A").start();
new Thread(futureTask,"").start();//结果会被缓冲,效率高
//获取Callable返回结果
//get 方法可能结构阻塞B
Integer integer = (Integer) futureTask.get();
System.out.println(integer);
}
}
class MyThread implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("执行call方法");
return 65486;
}
}