1. 程式人生 > >線程池1

線程池1

線程數 mil size cep public inter div pool private

任務類:

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

首先填滿核心線程數,然後填滿隊列,然後填滿最大線程數。

線程池1