码迷,mamicode.com
首页 > 其他好文 > 详细

Callable接口原理以及测试

时间:2020-04-04 09:31:41      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:star   one   构造函数   led   main   自旋锁   接口   throw   err   

package t1;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

class MyCallable implements Callable<Integer> {

@Override
public Integer call() throws Exception {
System.out.println("*****come in Callable");
TimeUnit.SECONDS.sleep(3);
return 1000;
}

}

public class CallableDemo {

public static void main(String[] args) throws InterruptedException, ExecutionException {
// FutureTask为RunnableFuture的实现类,RunnableFuture为Runnablede的子接口
// FutureTask的构造函数参数是Callable接口。
// 这样Thread的构造函数就可以使用Runnablede的包含Callable构造的子类FutureTask来构造
// 这是一种适配器模式
// FutureTask的get()方法可以获取Callable线程执行后的返回值,FutureTask出现的原因
// 就是分解任务再合并结果
// FutureTask的get()会出现阻塞,所以一般放在最后获取结果,也可采用自旋锁的方式while循环。
FutureTask<Integer> futureTask = new FutureTask<>(new MyCallable());
new Thread(futureTask).start();
new Thread(futureTask).start();// 多个线程抢1个futureTask,不会执行两次,如果非要执行两次,需要开两个futureTask
int result1 = 100;
while (futureTask.isDone())// 这儿阻塞,一旦计算完成,就取值
;
int result2 = futureTask.get();
System.out.println(result1 + result2);

}

}

 

输出结果:

*****come in Callable
1100

Callable接口原理以及测试

标签:star   one   构造函数   led   main   自旋锁   接口   throw   err   

原文地址:https://www.cnblogs.com/dengw125792/p/12630075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!