要自定義并發(fā)線程池,可以使用ThreadPoolExecutor
類來實(shí)現(xiàn)。ThreadPoolExecutor
是ExecutorService
接口的一個(gè)實(shí)現(xiàn)類,可以用來創(chuàng)建和管理線程池。
以下是一個(gè)自定義并發(fā)線程池的示例:
import java.util.concurrent.*;
public class CustomThreadPool {
public static void main(String[] args) {
// 核心線程數(shù)
int corePoolSize = 2;
// 最大線程數(shù)
int maximumPoolSize = 5;
// 空閑線程存活時(shí)間
long keepAliveTime = 10;
// 時(shí)間單位
TimeUnit unit = TimeUnit.SECONDS;
// 工作隊(duì)列
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(10);
// 創(chuàng)建自定義線程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
// 提交任務(wù)給線程池
for (int i = 0; i < 20; i++) {
threadPool.execute(new Task(i));
}
// 關(guān)閉線程池
threadPool.shutdown();
}
static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task " + taskId + " is running.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在上面的示例中,我們創(chuàng)建了一個(gè)ThreadPoolExecutor
線程池,設(shè)置了核心線程數(shù)為2,最大線程數(shù)為5,空閑線程存活時(shí)間為10秒。然后,我們使用execute()
方法提交了20個(gè)任務(wù)給線程池。每個(gè)任務(wù)是一個(gè)Task
對(duì)象,實(shí)現(xiàn)了Runnable
接口。在run()
方法中,我們打印了任務(wù)的id,并讓線程睡眠1秒。
最后,我們調(diào)用了shutdown()
方法來關(guān)閉線程池。