Callable接口原理以及测试

Posted dengw125792

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Callable接口原理以及测试相关的知识,希望对你有一定的参考价值。

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接口原理以及测试的主要内容,如果未能解决你的问题,请参考以下文章

Future接口和Callable接口以及FeatureTask详解

基于接口回调详解JUC中Callable和FutureTask实现原理

JUC--Callable 以及Lock同步锁

Java多线程之Callable接口与Runnable的实现以及选择

Java多线程研究06-带返回值的线程定义接口Callable以及Future,FutureTask的使用

Callable, Future和FutureTask简述