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


Java并发-Future实例
 

相关文章:

  • 2022-01-26
  • 2022-01-05
  • 2021-08-09
  • 2021-05-25
猜你喜欢
  • 2021-06-11
  • 2021-09-18
  • 2021-11-24
  • 2022-12-23
  • 2021-11-22
  • 2021-04-26
  • 2021-10-17
相关资源
相似解决方案