package lock;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* Callable 和Runnable,只有一个类实现了此接口(callable接口),
* 这个类是一个线程类。
* 是jdk1.5引入的,所以Callable要比Runnable要强
* 1.run()不能抛异常,导致代码结构混乱,call()可以抛异常
* 2.run()返回值类型只能是void类型,而call()返回值可以自己指定
* 3.call()的返回值也可以拿到,这个值需要通过线程池拿
* 4.call线程只能通过线程池来启动
* 5.call的返回值可以根据Future future=es.submit(new CallRunner());来拿到
* 调用future.get()来拿。
*/
public class CallTestDemo {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService es = Executors.newCachedThreadPool();
Future submit = es.submit(new CallRunner());
String s = (String)submit.get();
System.out.println(s);
}
}
class CallRunner implements Callable{
@Override
public Object call() throws Exception {
System.out.println("线程正在运行");
Thread.sleep(3000);
return "sucess";
}
}
callable
最新推荐文章于 2023-07-10 15:24:45 发布