1. 程式人生 > 其它 >自定義執行緒池(執行緒池7個引數)

自定義執行緒池(執行緒池7個引數)

技術標籤:多執行緒與高併發

                                            自定義執行緒池(執行緒池7個引數)
package src.main.java.com.qqjx.thread;
/*
 * @Auther  wangpeng
 * @Date 2021/2/4
 */

import java.io.IOException;
import java.util.concurrent.*;

public class T05_00_HelloThreadPool {

    static class Task implements Runnable {
private int i; public Task(int i) { this.i = i; } @Override public void run() { System.out.println(Thread.currentThread().getName() + " Task " + i); try { System.in.read(); } catch (IOException
e) { e.printStackTrace(); } } @Override public String toString() { return "Task{" + "i=" + i + '}'; } } public static void main(String[] args) { //ThreadPool 維護著兩個內容 一個是執行緒佇列 另外一個是任務佇列
//執行緒池7個引數 //corePoolSize 核心執行緒數 //maxmumPoolSize 最大執行緒數 //keepAliveTime 空閒時間 如果空閒時間執行緒沒有幹活 將歸還給作業系統 //第五個引數 BlockingQueue 阻塞佇列 看原始碼 ThreadPoolExecutor()構造方法 BlockingQueue<Runnable> workQueue //第六個引數 預設的執行緒工廠 //第七個引數 拒絕策略 執行緒忙 而且任務佇列滿的時候 要執行的拒絕策略 //拒絕策略有 Abort 拋異常 Discard 扔掉 DiscardOldest 扔掉排隊時間最久的 CallerRuns 呼叫者處理任務 ThreadPoolExecutor tpe = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(4), Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); for (int i = 0; i < 8; i++) { tpe.execute(new Task(i)); } System.out.println(tpe.getQueue()); tpe.execute(new Task(100)); System.out.println(tpe.getQueue()); tpe.shutdown(); } }
[Task{i=2}, Task{i=3}, Task{i=4}, Task{i=5}]
main Task 100
pool-1-thread-1 Task 0
pool-1-thread-2 Task 1
pool-1-thread-3 Task 6
pool-1-thread-4 Task 7