Java中的线程池

package com.cn.gbx;

import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
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;
import java.util.concurrent.Future;

public class TestThread {
	
	public static void main(String[] args) {
		
		//Java中提供的三个线程池
//		ExecutorService threadPool = Executors.newCachedThreadPool();
//		ExecutorService threadPool2 = Executors.newFixedThreadPool(3);
//		ExecutorService threadPool3 = Executors.newSingleThreadExecutor();
//		for (int i = 1; i <= 10; ++i) {
//			final int task = i;
//			threadPool.execute( new Runnable() {
//				public void run() {
//					for (int j = 1; j <= 10; ++j) {
//						System.out.println(Thread.currentThread().getName() + " is looping " + j + " at task " + task);
//					}
//				}
//			});
//		}
//		threadPool.shutdown();
		
		
		
		
		// Callable 与 future 的应用
		
//		ExecutorService threadPool = Executors.newCachedThreadPool();
//		Future<String> future = threadPool.submit(
//			new Callable<String>() {
//				@Override
//				public String call() throws Exception {
//					Thread.sleep(2000);
//					return "hello";
//				}
//			}
//		);
//		System.out.println("等待结果:");
//		try {
//			System.out.println("结果为: " + future.get());
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (ExecutionException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
		
		//利用CompletionService提交一组 Callable
		ExecutorService threadPool = Executors.newCachedThreadPool();
		CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool);
		for (int i = 1; i <= 10; ++i) {
			final int seq = i;
			completionService.submit(
					new Callable<Integer>() {

						@Override
						public Integer call() throws Exception {
							Thread.sleep(2000);
							return seq;
						}
					}
				);
		}
		for (int i = 1; i <= 10; ++i) {
			try {
				System.out.println(completionService.take().get());
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ExecutionException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

  

 

posted @ 2013-12-19 17:15  E_star  阅读(253)  评论(0编辑  收藏  举报