線程池例子

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 + "執行完畢");
	}
	
}
相關文章
相關標籤/搜索