2016年10月份的时候就想自己通过所学去实现一个线程池,但是因为种种原因,并未成功。前几天想到这个项目,继续思考怎么实现,于是就有了下文。注意:本人实现的线程池只是用来学习的,有不正之处还望指出。
实现线程池,觉得最重要是实现一个线程执行完任务能够回收到池中,并且下次能够从池中拿到该线程继续使用。10月份的时候想着用数组或者List去模拟一个池,前几天思考用队列是不是会更简单,所以想做就做了。线程池的关闭也是个比较棘手的问题,关闭有两种,一种是完成任务后线程全部关闭,一种是未完成任务全部线程就要结束。
项目使用maven结构,日志打印使用log4j,想学习maven的也可以下载学习,可以实现本地与测试资源自动切换。
项目结构图如下:
项目测试类main方法,初始化10个线程,执行100个任务:
项目运行图,可以看到线程被重复利用了:
最后是线程池关闭,执行完任务后,线程都结束了:
总结下:
完成了这个线程池之后,对自己的提升也是不小的。接下来就是继续探索java之路。