关于JAVA标志库创建线程池推荐看通过标准库创建线程池
核心思路
实现一个submit方法,让用户传入要执行的任务,在线程池内部,将用户传入的任务存储到阻塞队列中,根据用户实例化线程池时传入的参数,知道线程池中线程的数量,在构造方法中循环创建并启动线程,线程池中线程的任务就是不停的取出阻塞队列中的任务并执行
代码
java">//模拟实现线程池
class MyThreadPool{
//实例化一个阻塞队列用来存储添加进线程池的任务
private BlockingQueue<Runnable> queue=new LinkedBlockingQueue<>();
public void submit(Runnable task) throws InterruptedException {
queue.put(task);
}
//在实例化线程池时就应该实例化线程去处理阻塞队列中存储的任务
//所以实例化线程的代码在构造方法中书写
//n表示线程池中线程的数量
public MyThreadPool(int n){
for(int i=0;i<n;i++){
//线程要执行的任务是不停取出阻塞队列中的任务进行执行
Thread t=new Thread(()->{
while(true){
try {
Runnable task=queue.take();
task.run();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
t.start();
}
}
}