知足常乐|Java线程池原理,这一篇就够了


知足常乐|Java线程池原理,这一篇就够了作者|remax1|简书
前言线程池(Thread Pool)是一种基于池化思想管理线程的工具 。 线程过多会带来额外的开销 , 其中包括创建销毁线程的开销、调度线程的开销等等 , 同时也降低了计算机的整体性能 。 使用线程池可以带来诸多好处:①降低资源消耗:通过池化技术复用已创建的线程 , 减少线程创建和销毁的损耗 。 ②提高响应速度:任务到达时 , 特定情况下无需再创建线程 。 ③便于管理 。
知足常乐|Java线程池原理,这一篇就够了简单实现public class ThreadPool {//线程池中的默认线程池为5private static int WORK_NUM = 5;//队列默认任务个数为100private static int TASK_COUNT = 100;private WorkThread[] workThreads;//任务队列private final BlockingQueue taskQueue;private final int worker_num;public ThreadPool(int work_num,int taskCount){this.worker_num = work_num;taskQueue = new ArrayBlockingQueue(taskCount);workThreads = new WorkThread[worker_num];for (int i= 0;i先从构造器入手 ,
public ThreadPool(int work_num,int taskCount){this.worker_num = work_num;taskQueue = new ArrayBlockingQueue(taskCount);workThreads = new WorkThread[worker_num];for (int i= 0;i接收两个参数 , 一个是工作线程的个数 , 就是在线程池中默认创建的线程个数 。 第二个是任务个数 , 即等待队列中最多可接收得runable得个数 。
工作线程做了啥事:
/*** 工作线程*/class WorkThread extends Thread{@Overridepublic void run() {Runnable r = null;try {while (!isInterrupted()){r = taskQueue.take();if (r !=null){System.out.println(getId()+" ready exec :"+r);r.run();}}}catch (Exception e){}}public void stopWork(){interrupt();}}