1)創建固定大小線程池
- public class ThreadTest {
- public static void main(String[] args) {
- //ExecutorService executorService = Executors.newFixedThreadPool(2); //創建一個可重用固定線程數的線程池
- //ExecutorService executorService = Executors.newSingleThreadExecutor(); //創建單任務線程池
- ExecutorService executorService = Executors.newCachedThreadPool(); //創建一個可變尺寸的線程池
- Task task1 = new Task();
- Task task2 = new Task();
- Task task3 = new Task();
- executorService.execute(task1);
- executorService.execute(task2);
- executorService.execute(task3);
- executorService.shutdown();
- }
- }
- class Task implements Runnable {
- public void run() {
- System.out.println(Thread.currentThread().getName() + " Hello");
- }
- }
對於大小固定的線程池,如:newFixedThreadPool(int size)和newSingeThreadExecutor(),當要加入的任務大於線程池的大小時,則任務需要排隊等待。
2)創建可變尺寸線程池
- public class ThreadTest {
- public static void main(String[] args) {
- ExecutorService executorService = Executors.newCachedThreadPool(); //創建一個可變尺寸的線程池
- Task task1 = new Task();
- Task task2 = new Task();
- Task task3 = new Task();
- executorService.execute(task1);
- executorService.execute(task2);
- executorService.execute(task3);
- executorService.shutdown();
- }
- }
- class Task implements Runnable {
- public void run() {
- System.out.println(Thread.currentThread().getName() + " Hello");
- }
- }
3)創建延遲連接線程池
- public class ThreadTest {
- public static void main(String[] args) {
- ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
- Task task1 = new Task();
- Task task2 = new Task();
- Task task3 = new Task();
- executorService.execute(task1);
- executorService.scheduleAtFixedRate(task2,0L,2,TimeUnit.HOURS); //此方法表示在指定的週期內循環執行task2任務,2表示循環的週期,TimeUtils.HOURS表示循 環週期的時間單位,此處是小時
- executorService.schedule(task3,10, TimeUnit.HOURS); //task2是實現Runnable接口的任務,10時延遲的時間,TimeUtil.HOURS是延遲時間的計量單位,在此處是小 時
- executorService.shutdown();
- }
- }
- class Task implements Runnable {
- public void run() {
- System.out.println(Thread.currentThread().getName() + " Hello");
- }
- }