JDK-线程池

package com.angiehawk.threadpool;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 关于线程池:
 *		 关于线程池基本需求:
 * 		  	线程池里,线程数量的配置。
  			能够提供动态调整线程的数量。 			
  			能够提供Task的状态,比如完成了多少,还有多少没有完成。
   		对于可扩展性而言有以下几点:
   			如果不能满足需要能够很容易的扩展。
   			对于线程池线程的创建能否提够扩展。
   			线程池的处理策略能否扩展
 * @author angie_hawk7
 *
 */
public class ThreadPool1 {

	public static void main(String[] args) throws Exception {
		ExecutorService service = new Xu1PoolExecutor(50, 200, 60L,
				TimeUnit.SECONDS, new SynchronousQueue<Runnable>(),
				new WorkerThreadFactory("angiehawk"));
		List<Future<String>> threadRel = new ArrayList<Future<String>>();
		for (int i = 0; i < 205; i++) {
			Future<String> future = service.submit(new WorkerTask());
			System.out.println(future.get());
		}
	}

}

class Xu1PoolExecutor extends ThreadPoolExecutor {

	private Random ran = new Random();

	public Xu1PoolExecutor(int corePoolSize, int maximumPoolSize,
			long keepAliveTime, TimeUnit unit,
			BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory) {
		super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
				threadFactory);
		// TODO Auto-generated constructor stub
	}

	protected void beforeExecute(Thread t, Runnable r) {
		System.out.println("before execute:" + t.getName());
		// t.setName("angie_hawk" + ran.nextInt());
	}

	protected void afterExecute(Thread t, Runnable r) {
		System.out.println(t.getName() + "work end");
	}

}

class WorkerThreadFactory implements ThreadFactory {

	private String threadPref;
	private int counter = 0;

	public WorkerThreadFactory(String pref) {
		this.threadPref = pref;
	}

	@Override
	public Thread newThread(Runnable r) {
		// TODO Auto-generated method stub
		return new Thread(r, threadPref + "-" + counter++);
	}

}

class WorkerTask implements Callable<String> {

	@Override
	public String call() throws Exception {
		// TODO Auto-generated method stub
		try {
			System.out.println(Thread.currentThread().getName()
					+ "is working..");
			//Thread.sleep(3000L);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return Thread.currentThread().getName();
	}

}


你可能感兴趣的:(线程池)