原 Callable的使用
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/zhangwuji/article/details/1148
代码如下:
package com.mszl.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 功能:Callable演示
* 备注:更多资料请访问 http://www.91mszl.com
* @author bobo teacher
*/
class callFace implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("come in");
return 8888;
}
}
public class CallableDemo{
public static void main(String[] args) throws InterruptedException, ExecutionException {
callFace cf=new callFace();
FutureTask<Integer> ft=new FutureTask<>(cf); // FutureTask 同时实现了Callable和Runnable
Thread t=new Thread(ft, "A");
t.start();
Thread t1=new Thread(ft, "B");
t1.start();
int result0=12;
int result1=ft.get();
int result2=result0+result1;
System.out.println(ft.get()); // 获取到返回值:ft.get()建议放到最后,如果放到前面可能导致线程阻塞
System.out.println(result2);
}
}
执行结果:
come in
8888
8900
总结:
(1)如无特殊要求,建议将ft.get(),即FutureTask的返回值这行代码放到程序的最后,因为如果放到前面可能导致线程阻塞。
(2)多个线程同时调用FutureTask的call方法时,只会调用一次。如上面的例子,A,B两个线程都启动了,但call方法里面的come in 只打印了一次。
2019-12-03 11:09:05 阅读(1057)
名师出品,必属精品 https://www.91mszl.com
博主信息