线程池例子

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Test1 {
	
	public static void main(String[] args) {
		// ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
		// ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
		// ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newSingleThreadExecutor();
		// ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newScheduledThreadPool(10);
		// ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newWorkStealingPool();
		ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(5));
		for (int i = 0; i <= 15; i++) {
			MyTask myTask = new MyTask(i + 1);
			executor.execute(myTask);
			System.out.println("线程池中线程数目:" + executor.getPoolSize() + ",队列中等待执行的任务数目:" + executor.getQueue().size() + ",已执行完别的任务数目:" + executor.getCompletedTaskCount());
		}
		executor.shutdown();
	}

}

class MyTask implements Runnable {
	private int taskNum;
	
	public MyTask(int num) {
		this.taskNum = num;
	}
	
	@Override
	public void run() {
		System.out.println("正在执行task" + taskNum);
		try {
			Thread.currentThread().sleep(4000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("task" + taskNum + "执行完毕");
	}
	
}
相关文章
相关标签/搜索