Java并发-Future实例

1.  Main

public class Main {

	public static void main(String[] args) throws Exception {
		FutureContext futureContext = new FutureContext();
		
		ExecutorService executorService = Executors.newCachedThreadPool();
		for(int i = 0; i <= 9; i++) {
			Future<Integer> future = executorService.submit(new Worker(i * 10 + 1, i * 10 + 10));
			futureContext.addFuture(future);
		}
		executorService.shutdown();
		
		new Thread(new Consumer(futureContext)).start();
		System.out.println("Main thread finished.");
	}
}

2. Worker

public class Worker implements Callable<Integer> {
	private int start;
	private int end;
	
	public Worker(int start, int end) {
		this.start = start;
		this.end = end;
	}

	public Integer call() throws Exception {
		int sum = 0;
		for (int i = start; i <= end; i++) {
			sum += i;
		}
		System.out.println("Work[" + start + " , " + end + "], finished.");
		return sum;
	}
}

3. FutureContext

public class FutureContext {
	
	private List<Future<Integer>> futureList = new ArrayList<Future<Integer>>();

	public List<Future<Integer>> getFutureList() {
		return futureList;
	}

	public void addFuture(Future<Integer> future) {
		this.futureList.add(future);
	}
	
}

4. Consumer

public class Consumer implements Runnable {
	private FutureContext futureContext;
	
	public Consumer(FutureContext futureContext) {
		this.futureContext = futureContext;
	}
	
	public void run() {
		try{
			Thread.sleep(3000);
			
			int sum = 0;
			for(Future<Integer> fu : futureContext.getFutureList()) {
				sum += fu.get();
			}
			System.out.println("Three seconds later, Consumer finished, sum=" + sum);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}

Console



 

猜你喜欢

转载自xuezhongde.iteye.com/blog/2208639