今天我在复习Java8的新特性,就是用computablefuture异步计算随机生成10W个0-100范围内整数之和。
我写了一段程序,希望能够给大家一点启发,但是,遗憾地是,我没有实现,随机打印生成的每一个数字,然后打印出他们的和。而是,打印了2个数字,我一直无法解释怎么会有2个数字?请高手帮我查看一下。谢谢。
class BatchRandomSum implements Runnable{
private CompletableFuture<Integer> cf = null;
public BatchRandomSum(CompletableFuture<Integer> cf) {
// TODO Auto-generated constructor stub
this.cf = cf;
}
public static void test() {
CompletableFuture<Integer> future = new CompletableFuture<>();
new Thread(new BatchRandomSum(future)).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
future.complete(10);
}
public int getNumbers() {
int r = 0;
//Random r = new Random();
r = (int)(Math.random()*100+1);
//System.out.println(r);
return r;
}
@Override
public void run() {
// TODO Auto-generated method stub
int tmp = getNumbers();
System.out.println(tmp);
int sum = 0;
try {
for(int a=0; a<cf.get(); a++) {
sum=sum+tmp;
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sum);
}
public static void main (String[] args) {
test();
}
}
第一个数字是你的随机数(也是你的最大循环次数) cf.get() 你设置了 10
第二个是你计算的和,这里随机数 你只get了一次,int tmp = getNumbers();
这里循环相当于 10 * 了这个随机数temp
所以是 2 个数字
异步计算也不是这样计算的呀。
1 这个只是异步,编程的工具类。
2 计算10w 个随机数相加,你异步里生成10个数 然后加加就好了(或者 多分几个线程异步计算,最后再把结果聚合。)
3 10w 个随机数 加加 也 数很大,建议使用jdk8 提供的 fork join 分流计算