Java java.util.concurrent.Future的一个例子
JAVA 一个 例子 util Future concurrent
2023-09-14 09:03:08 时间
package callableTest;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class CallableIndicator{
private String name;
private Double result;
static public final int TIME = 3000;
public CallableIndicator(String name, Double result){
this.name = name;
this.result = result;
}
public Double getResult(){
return this.result;
}
public String getName(){
return this.name;
}
}
public class CallableTest {
private static final int POOL_SIZE = 2;
static class CalcThread implements Callable<CallableIndicator> {
private String name;
private List<Double> dataList = new ArrayList<>();
public CalcThread(String name) {
for(int i = 0; i < 10000; ++i) {
dataList.add(Math.random());
}
this.name = name;
System.out.println("In CalcThread constructor, thread id: " +
Thread.currentThread().getId());
}
@Override
public CallableIndicator call() throws Exception {
double total = 0;
for(Double d : dataList) {
total += d;
}
System.out.println("In CalcThread @Override call(), thread id: " +
Thread.currentThread().getId());
Thread.sleep(CallableIndicator.TIME);
return new CallableIndicator(this.name, total / dataList.size());
}
}
public static void printThread(){
System.out.println("In main Thread? " + Thread.currentThread().getId());
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
List<Future<CallableIndicator>> fList = new ArrayList<>();
ExecutorService es = Executors.newFixedThreadPool(POOL_SIZE);
printThread();
System.out.println("Ready to submit new thread...");
for(int i = 0; i < POOL_SIZE; ++i) {
fList.add(es.submit(new CalcThread("Jerry Thread: " + i)));
}
for(Future<CallableIndicator> f : fList) {
try {
/*
* 注意这个get是异步操作:The result can only be retrieved using method get when the computation has completed, blocking if necessary until it is ready.
*/
System.out.println("Thread name: " + f.get().getName() + " result: " + f.get().getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println("duration: " + ( end - start));
es.shutdown();
}
}
相关文章
- Java实现 LeetCode 538 把二叉搜索树转换为累加树(遍历树)
- Java实现 LeetCode 503 下一个更大元素 II
- Java实现 LeetCode 117 填充每个节点的下一个右侧节点指针 II(二)
- java实现第六届蓝桥杯居民集会
- java实现第五届蓝桥杯六角填数
- Java实现第八届蓝桥杯9算数式
- JAVA RDD 介绍
- 一个Java程序员该有的良好品质
- [Java Spring] @Profile
- 回调--一个经典例子让你彻彻底底理解java回调机制
- 一个实际的例子学习 SAP BTP Java 应用的 @Before 注解使用方式
- 使用javap分析Java字节码的一个例子
- 一个Java实现的把指定字符串生成二维码并保存成图片的代码
- 使用Java Stream API将List按自定义分组规则转换成Map的一个例子
- Java servlet一个最简单的例子
- 一个利用System.gc和finalize研究Java垃圾回收机制的练习
- java - 集成了请求方法的好用依赖与简单使用
- 一个程序说明java中this关键字
- Java //PP2.7 编写一个应用程序,提示并读入表示速度和旅行距离的整型值,然后以浮点型显示旅行所需要的时间
- Java //PP1.3 编写一个程序,分行显示你的名字、生日、爱好、最喜欢的书及最喜欢的电影。