多线程第三种创建方式-Callable()
作者:互联网
@FunctionalInterface
public interface Callable
Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。
然而,A Runnable不返回结果,也不能抛出被检查的异常。
该Executors类包含的实用方法,从其他普通形式转换为Callable类。
- 可以有返回值
- 可以抛出异常
- 方法不同run call
Thread类重载只有Runnable,如果想要Thread类识别Callable,Callable可以通过Runnable来连接Thread
public class CallableTestt {
public static void main(String[] args) throws ExecutionException, InterruptedException {
/*传统方式 new Thread(new MyThread()).start();*/
// new Thread().start();
MyThread1 thread=new MyThread1();
//适配类
FutureTask<Callable> futureTask = new FutureTask(thread);
new Thread(futureTask,"A").start();
new Thread(futureTask,"B").start(); //FutureTask只会被线程run一次所以只会产生一个call,与FutureTask类中的state关键字有关
//futureTask.get()可能会产生阻塞
String callable = String.valueOf(futureTask.get());
System.out.println(callable);
}
}
class MyThread implements Runnable{
@Override
public void run() {
}
}
//Callable方法泛型参数等于方法的返回值
class MyThread1 implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("call");
return "123";
}
}
标签:Runnable,Thread,第三种,Callable,futureTask,new,多线程,public 来源: https://www.cnblogs.com/Liuyunsan/p/15797487.html