- 线程池在源码中主要实现形式为每一个线程为一个work
- 以下面代码为例
ExecutorService service = Executors.newFixedThreadPool(5); for (int i = 0; i < 15; i++) { service.submit(new Runnable() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }); }
-
图解流程
-
4.简单解释下,这个地方5个线程首先拿到任务,开始启动,先运行完自己的第一个任务,然后去队列中取,这时,如果是core线程取不到就会一直阻塞,如果不是核心线程,取不到这个work就会结束,所有非core线程就会被回收,得以保证线程保持在core线程数,核心线程如果线程池不是shutdown状态,且取不到任务情况下会一直阻塞,反映到程序中来看,这个进程一直没有结束,又没做事
5.线程池还有很多知识,其它博客讲得很详细了,这里就不说了,有啥问题或不同意见欢迎评论