Callable(简单)
1、可以有返回值
2、可以抛出异常
3、方法不同,run()/ call()
代码测试
package com.hudu.demo01.callable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// new Thread(new MyThread()).start(); 类实现Runnable()接口
// new Thread(new Runnable()).start();
// new Thread(new FutureTask<V>()).start();//和上面等价,FutureTask是Runnable的实现类
// new Thread(new FutureTask<V>(Callable)).start();//FutureTask又一个构造方法,参数是传入一个Callable
// new Thread().start();//怎么启动Callable
MyThread thread = new MyThread();
//适配类
FutureTask futureTask = new FutureTask(thread);
new Thread(futureTask,"A").start();
new Thread(futureTask,"B").start();//结果会被缓存,提高效率
Integer o = (Integer)futureTask.get();//获取Callable的返回结果,这个get方法会产生阻塞!把它放到最后
//或者使用异步通信处理
System.out.println(o);
}
}
//class MyThread implements Runnable{
//
// @Override
// public void run() {
//
// }
//}
class MyThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println("call()");//会打印几个call
return 12345;
}
}
细节:
1、有缓存
2、结果可能需要等待,会阻塞
本作品采用《CC 协议》,转载必须注明作者和本文链接