Java线程池实现原理

原创
2016/04/08 16:35
阅读数 197

为什么需要使用线程池:为了减少频繁创建线程与关闭线程的造成的资源占用

什么时候需要线程池:线程创建时间+销毁时间 > 执行时间

下面是实现代码

/**
 * 线程池
 * Created by zhoujingjie on 2016/4/8.
 */
public class ThreadPool {

    private Worker[] workers;
    //使用阻塞队列
    private BlockingQueue<Runnable> tasks = new LinkedBlockingDeque<>();

    public ThreadPool(int size) {
        this.workers = new Worker[size];
    }

    public void execute(Runnable task){
        tasks.add(task);
    }

    public void start(){
        for(int i=0;i<workers.length;i++) {
            workers[i] = new Worker();
            workers[i].start();
        }

    }

    public void destroy(){
        for(Worker worker:workers){
            worker.stopIt();
            worker = null;
        }
    }

    /**
     * 工作执行者
     */
    private class Worker extends Thread{

        private boolean isRunning = true;

        public void stopIt(){
            isRunning =false;
        }
        @Override
        public void run() {
            while (isRunning){
                try {
                    Runnable task=tasks.take();
                    task.run();
                    tasks.remove(task);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


原理:

  1. 预先创建一定数量的线程放入内存中形成线程池。

  2. 确保每个任务执行者不会被关闭,无任务执行时则线程阻塞(挂起)

展开阅读全文
加载中

作者的其它热门文章

打赏
1
11 收藏
分享
打赏
0 评论
11 收藏
1
分享
返回顶部
顶部