1. 程式人生 > >執行緒池1

執行緒池1

任務類:

package com._ThreadPool;

public class MyTask implements Runnable {
    private int taskId;
    public MyTask(int id){
        this.taskId = id;
    }
    @Override
    public void run() {
        System.out.println("Mytask" + taskId +"開始執行 ");
        try {
            Thread.sleep(2000);
        } 
catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Mytask" + taskId + "執行結束 "); } }

 

執行緒池1:

package com._ThreadPool;

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

public class MyExecutor { public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(5,10,200,TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5)); for(int i = 0 ;i < 15 ;i ++){ MyTask task = new MyTask(i); executor.execute(task); System.
out.println("執行緒池中的執行緒數量" + executor.getPoolSize()+ "佇列中等待的數目" + executor.getQueue().size() + "已經執行完的任務數目" + executor.getCompletedTaskCount()); } executor.shutdown(); } }

結果:

Mytask0開始執行 
執行緒池中的執行緒數量1佇列中等待的數目0已經執行完的任務數目0
執行緒池中的執行緒數量2佇列中等待的數目0已經執行完的任務數目0
Mytask1開始執行 
執行緒池中的執行緒數量3佇列中等待的數目0已經執行完的任務數目0
Mytask2開始執行 
執行緒池中的執行緒數量4佇列中等待的數目0已經執行完的任務數目0
Mytask3開始執行 
執行緒池中的執行緒數量5佇列中等待的數目0已經執行完的任務數目0
Mytask4開始執行 
執行緒池中的執行緒數量5佇列中等待的數目1已經執行完的任務數目0
執行緒池中的執行緒數量5佇列中等待的數目2已經執行完的任務數目0
執行緒池中的執行緒數量5佇列中等待的數目3已經執行完的任務數目0
執行緒池中的執行緒數量5佇列中等待的數目4已經執行完的任務數目0
執行緒池中的執行緒數量5佇列中等待的數目5已經執行完的任務數目0
執行緒池中的執行緒數量6佇列中等待的數目5已經執行完的任務數目0
Mytask10開始執行 
執行緒池中的執行緒數量7佇列中等待的數目5已經執行完的任務數目0
Mytask11開始執行 
執行緒池中的執行緒數量8佇列中等待的數目5已經執行完的任務數目0
Mytask12開始執行 
執行緒池中的執行緒數量9佇列中等待的數目5已經執行完的任務數目0
Mytask13開始執行 
執行緒池中的執行緒數量10佇列中等待的數目5已經執行完的任務數目0
Mytask14開始執行 
Mytask0執行結束 
Mytask5開始執行 
Mytask3執行結束 
Mytask14執行結束 
Mytask13執行結束 
Mytask11執行結束 
Mytask1執行結束 
Mytask2執行結束 
Mytask10執行結束 
Mytask4執行結束 
Mytask12執行結束 
Mytask9開始執行 
Mytask8開始執行 
Mytask7開始執行 
Mytask6開始執行 
Mytask5執行結束 
Mytask7執行結束 
Mytask6執行結束 
Mytask8執行結束 
Mytask9執行結束 

Process finished with exit code 0

首先填滿核心執行緒數,然後填滿佇列,然後填滿最大執行緒數。