1、什么是线程池。

线程池在系统启动的时候即创建大量的空闲的线程,程序将一个Runnable对象或者Callable对象传给线程池,线程池就会启动一个线程来执行它们的run()或者call()方法,当run()或者call()方法执行结束后,该线程并不会死亡,而是再次返回线程池称为空闲状态,等待执行下一个Runable对象的run()或者call()方法。

Java 5以前需要手动实现线程池,Java 5后内建了线程池,新增Excutors工厂类来产生线程池,该工厂类包含以下静态工厂方法来创建线程池:

上面7个方法,前面3个返回一个ExecutorService对象,该对象代表一个线程池,它可以执行Runnable对象或者Callable对象所代表的的线程;中间2个方法返回一个ScheduledExecutorService线程池,它是ExecutorService的子类,它可以在指定延迟后执行线程任务;最后2个是Java 8新增的方法,可以充分利用多CPU并行的能力。这两个方法生成的work stealing池,都相当于后台线程池,如果所有的前台线程都死亡了,work stealing池中的线程会自动死亡。

ExecutorService代表尽快执行线程的线程池(只要线程池中有空闲线程,就立即执行线程任务),提供了3个方法:

ScheduledExecutorService代表可在指定时延后或者周期性地执行线程任务的线程池,提供了4个方法:

用完一个线程池后,应该调用该线程池的shutdown()方法,该方法将启动线程池的关闭序列。调用该方法后线程池将不再接收新任务,但会将以前所有已提交任务执行完成。所有已提交的任务执行完成后,线程池中所有的线程都会死亡。调用线程池的shutdownNow()方法关闭线程池,将会试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。

使用线程池的步骤如下:

1》调用Executors类的静态工厂方法创建一个ExecutorService对象,该对象代表一个线程池。

2》创建Runnable实现类或者Callable实现类的实例,作为线程执行的任务。

3》调用ExecutorService对象的submit()方法来提交Runnable对象或者Callable对象。

4》当不想提交任何任务时,调用ExecutorService对象的shutdown()方法来关闭线程池。

举个例子:

public class ImplCallable implements Callable<Integer>{...@Overridepublic Integer call(){...//do something
      System.out.println(Thread.currentThread().getName());//return a value.return 1;}public static void main(String[] agrs) throws InterruptedException, ExecutionException{...//创建一个具有固定线程数(6)的线程池      ExecutorService pool=Executors.newFixedThreadPool(6);//创建并启动一个线程FutureTask<Integer> target=new FutureTask<Integer>(new ImplCallable());//向线程池提交两个线程      pool.submit(target);      pool.submit(target);//关闭线程池      pool.shutdown();}
}

2、Java 8增强的ForkJoinPool

转载于:https://www.cnblogs.com/ZeroMZ/p/11409913.html

Java-多线程第四篇线程池相关推荐

  1. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  2. java多线程总结五:线程池的原理及实现

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.         假设一个服务器完成一项任务所需时间为:T1 ...

  3. Java多线程详解(线程池)

    嗨喽-小伙伴们我来了, 上一章我们介绍了Java中的Thread类里一些常用的方法.本节我们就来聊一聊线程池. 说到"池",大家或许都不陌生,在java中,我们有见过数据库连接池, ...

  4. Java多线程学习八:线程池常用的阻塞队列

    线程池内部结构 线程池的内部结构主要由四部分组成,如图所示. 第一部分是线程池管理器,它主要负责管理线程池的创建.销毁.添加任务等管理操作,它是整个线程池的管家. 第二部分是工作线程,也就是图中的线程 ...

  5. Java多线程学习七:线程池的 4 种拒绝策略和 6 种常见的线程池

    以便在必要的时候按照我们的策略来拒绝任务,那么拒绝任务的时机是什么呢?线程池会在以下两种情况下会拒绝新提交的任务. 第一种情况是当我们调用 shutdown 等方法关闭线程池后,即便此时可能线程池内部 ...

  6. Java多线程知识点整理(线程池)

    2019独角兽企业重金招聘Python工程师标准>>> 1.线程池的使用 线程池一般配合队列一起工作,是线程池限制并发处理任务的数量.然后设置队列的大小,当任务超过队列大小时,通过一 ...

  7. java多线程详解及线程池创建

    多线程 线程 线程是独立的执行路径 在程序执行时,即使自己没有创建线程,后台也会有多个线程 main()称为主线程,为系统的入口,用于执行整个程序 在一个进程中如果开辟了多个线程,线程的运行由调度器安 ...

  8. Java多线程系列--【JUC线程池 02】- 线程池原理(一)

    参考:http://www.cnblogs.com/skywang12345/p/java_threads_category.html 概要 在前面一章"Java多线程系列--"J ...

  9. 【Java中的四种线程池】

    目录 1.CachedThreadPool - 可缓存线程池 2.FixedThreadPool - 定长线程池 3.SingleThreadExecutor - 单线程池 4.ScheduledTh ...

  10. Java多线程(7)--线程池创建线程

    经常创建和销毁.使用量特别大的资源,比如并发情况下的线程,对性能影响很大. 提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁.实现重复利用. 使用线程池好处: ① ...

最新文章

  1. function收集
  2. Spring(七)持久层
  3. tab切换实现方式1
  4. linux 取消证书登录密码,SUSELinux 中为 SSH 访问设置不输入密码的证书认证登录方式...
  5. 常用计算机网络技术缩写词和术语,网络技术缩写词和术语
  6. GTC CHINA 2019 | 黄仁勋发表主题演讲,多项创新技术与合作全面助力 AI 加速落地
  7. code craft_Craft.io,设计和代码
  8. (9)Verilog inout使用方法(FPGA不积跬步101)
  9. iPhone 12 5G更耗电?续航时间较4G妥妥地缩短不少
  10. CUDA TOOlkit Programming Guide K. Unified Memory Programming
  11. 【DTOJ】2701:问候
  12. 财政bug之”Y2K Accounting Bug“
  13. 每天一个算法(简单)
  14. QTreeView实现圆角样式
  15. C语言——快速取以2为底x的对数
  16. 软件 耗电 android OS 系统,六款安卓平台浏览器耗电量实测
  17. 如何定位web前后台的BUG
  18. bmp180气压传感器工作原理_40张动图,揭示各种传感器工作原理
  19. html5 audio样式修改,HTML5中 audio的样式设置
  20. 庄子 “唯至人乃能游于世不避,顺人而不失己。”

热门文章

  1. 给tomcat指定JDK
  2. Error:Failed to open zip file. Re-download dependencies and sync project
  3. 修改配置文件,编译freeswitch支持H264
  4. Github分支管理范例
  5. 百度人脸识别文档冲突,facetype应是face_type
  6. 无锡美景:踏过樱花第几桥
  7. python余弦定理求角_余弦定理计算文章相似度
  8. php 按行读取并分割字符串
  9. angularjs动态侧边栏菜单_极速PDF的工具菜单栏不见了如何恢复?
  10. hcl启动设备失败_水电站,黑启动是什么?