现在的位置: 首页 > 综合 > 正文

Callable有返回值的线程

2018年02月13日 ⁄ 综合 ⁄ 共 926字 ⁄ 字号 评论关闭
package com.entel.research;

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CallableAndFuture
{
	public static void main(String[] args)
	{
		ExecutorService threadPool = Executors.newFixedThreadPool(5);
		CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(
				threadPool);
		for (int i = 1; i <= 5; i++)
		{
			final int seq = i;
			completionService.submit(new Callable<Integer>()
			{
				public Integer call() throws Exception
				{
					Thread.sleep(new Random().nextInt(1000));
					return seq;
				}
			});
		}
		
		for (int i = 0; i < 5; i++)
		{
			try
			{
				System.out.println(completionService.take().get());
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			catch (ExecutionException e)
			{
				e.printStackTrace();
			}
		}
		
		threadPool.shutdown();
		System.out.println("The End");
	}
}

【上篇】
【下篇】

抱歉!评论已关闭.