ComputableFuture如何异步计算随机生成10W个0-100整数之间的数的和

今天我在复习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 分流计算