Callable接口,开启线程
我们知道
new Thread().start()//这是有且只有唯一启动线程的方法
查看Thread()源码
public Thread(Runnable target, String name) {
init(null, target, name, 0);
}
发现需要的参数是Runnable类型
那么我们现在要做的就是怎么把Callable和Runnable连接起来,
查看JDK文档
实现
package com.luoKing.Callable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/*
*
* 使用Runnable的实现类FutureTask来连接Callable接口
*
* */
public class callableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask futureTask = new FutureTask(new call());//使用Runnable的实现类FutureTask来连接Callable接口
new Thread(futureTask,"A").start();//启动线程的唯一方式
new Thread(futureTask,"B").start();//callable有缓存
String result = (String)futureTask.get();//由于要拿到运算结果,所以这里会发生阻塞
System.out.println(result);
}
}
class call implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("1024");
return "call()";
}
}