线程池

Java四种线程池和工作队列:

newCachedThreadPool()  

                先查看池中有没有以前建立的线程,如果有,就reuse.如果没有,就建一个新的线程加入池中,能reuse的线程,必须是    timeout IDLE内的池中线程,缺省timeout是60s,超过这个IDLE时长,线程实例将被终止及移出池。


1、主线程的执行与线程池里的线程分开,有可能主线程结束了,但是线程池还在运行2、放入线程池的线程并不一定会按其放入的先后而顺序执行

newFixedThreadPool()

                和缓存类似任意时间点,最多只能有固定数目的活动线程存在,此时如果有新的线程要建立,只能放在另外的队列中等待直到当前的线程中某个线程终止直接被移出池子,没有IDLE机制


上面创建了一个固定大小的线程池,大小为5.也就说同一时刻最多只有5个线程能运行。并且线程执行完成后就从线程池中移出。它也不能保证放入的线程能按顺序执行。这要看在等待运行的线程的竞争状态了

ScheduledThreadPool()

                这个池子里的线程可以按schedule依次delay执行,或周期执行


SingleThreadExecutor

                用的是和cache池和fixed池相同的底层池,但线程数目是1



1 线程放入线程池中,除了使用execute,也可以使用submit,它们两个的区别是一个使用有返回值,一个没有返回值。submit的方法很适应于生产者-消费者模式,通过和Future结合一起使用,可以起到如果线程没有返回结果,就阻塞当前线程等待线程 池结果返回。


execute()

表示往线程池添加线程,有可能会立即运行,也有可能不会。无法预知线程何时开始,何时线束。

shutdown()

通常放在execute后面。如果调用 了这个方法,一方面,表明当前线程池已不再接收新添加的线程,新添加的线程会被拒绝执行。另一方面,表明当所有线程执行完毕时,回收线程池的资源。注意,它不会马上关闭线程池!

shutdownNow()

不管当前有没有线程在执行,马上关闭线程池!这个方法要小心使用,要不可能会引起系统数据异常!

线程5中状态:  新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:肥肥鱼链接:https://www.zhihu.com/question/30804052/answer/4...
    TTTqiu阅读 4,535评论 0 4
  • Java线程池 一、Executor(执行器)框架 ​ 创建一个新线程是有一定代价的,以为涉及与操作系统的交互...
    thorhill阅读 5,464评论 4 23
  • 文章摘要:在业务系统中,线程池框架技术一直是用来解决多线程并发的一种有效方法。 在JDK中,J.U.C并发包下的T...
    癫狂侠阅读 6,423评论 2 21
  • 线程池的概念和定义 在服务器端的业务应用开发中,Web服务器(诸如Tomcat、Jetty)需要接受并处理http...
    dtdh阅读 4,260评论 0 1
  • 背灯和月就花阴,已是十年踪迹十年心。 除了沉溺小说,写写文字,剩余的爱好大抵是旅行与拍照。旅行的时光不常有,拍照则...
    简祯言阅读 2,425评论 1 1