Callable
Callable
-
-
1、可以有返回值
2、可以抛出异常
3、方法不同,run() / call() -
代码测试
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// new Thread(new Runnable()).start();
// new Thread(new FutureTask<V>()).start();
// new Runnable() 等价于 new FutureTask<V>()
// new Thread(new FutureTask<V>( Callable )).start();
MyThread myThread = new MyThread(); //如何启动 Callable
FutureTask futureTask = new FutureTask(myThread); //适配类
new Thread(futureTask, "A").start();
String msg = (String) futureTask.get(); //获取Callable的返回结果 可能会产生阻塞
System.out.println(msg);
}
}
class MyThread implements Callable<String> {
@Override
public String call() throws Exception {
return "返回Callable";
}
}
//返回Callable
-
两个线程触发
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// new Thread(new Runnable()).start();
// new Thread(new FutureTask<V>()).start();
// new Runnable() 等价于 new FutureTask<V>()
// new Thread(new FutureTask<V>( Callable )).start();
MyThread myThread = new MyThread(); //如何启动 Callable
FutureTask futureTask = new FutureTask(myThread); //适配类
new Thread(futureTask, "A").start();
new Thread(futureTask, "B").start();
String msg = (String) futureTask.get(); //获取Callable的返回结果 可能会产生阻塞 :可以使用异步通信
System.out.println(msg);
}
}
class MyThread implements Callable<String> {
@Override
public String call() throws Exception {
return "返回Callable";
}
}
//返回Callable
1、有缓存
2、结果可能需要等待,会阻塞!

浙公网安备 33010602011771号