Callable(简单)
Callable 跟Runnable 的区别:
Callable
- 可以有返回值
- 可以抛出异常
- 方法不同,Runnable 用的是run(),CallAble 用的是call() 方法
代码测试
CallAble 的泛型就是方法的返回值
package com.callable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 1. 探究原理
* 2. 觉自己会用
*/
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// new Thread(()->new Runnable()).start(); 功能有限不要用了
// new Thread(()->new FutureTask<V>Callable).start(); FutureTask 可以调用CallAble
new Thread().start();
MyThread thread = new MyThread();
FutureTask<String> futureTask = new FutureTask<>(thread);
//适配类
new Thread(futureTask,"A").start();
new Thread(futureTask,"B").start();// 结果会被缓存,效率高,挺好一个futureTask 线程只会执行一次
String s = futureTask.get();//获取Callable 的返回结果,这个get 方法可能会产生阻塞!把他放到最后
//或者使用异步通信来处理!
System.out.println(s);
}
}
class MyThread implements Callable<String>{
// @Override
// public void run() {
//
// }
@Override
public String call() throws Exception {
System.out.println("call");
//耗时的操作
return "456789";
}
}
没有实战过!这种Callable 接口是有返回值的!
细节:
- 有缓存
- 结果可能需要等待,会阻塞!