Java 1.5中提供的最通用的并发增强功能之一是引入了可自定义的线程池。 这些线程池使您可以对诸如线程数,线程重用,调度和线程构造之类的东西进行大量控制。 让我们回顾一下。

首先,线程池。 让我们直接进入java.util.concurrent.ExecutorService ,它为我们提供了线程池的基本接口。 所有线程池都允许提交CallableRunnable实例以供将来执行。 它们还提供各种池管理方法。

泳池管理

池存在各种管理方法。 您可以使用shutdown()池,该池将拒绝将来的所有提交,但将完全处理进程内执行,甚至还包括尚未开始但在关闭启动之前提交的进程。 您还可以更积极地执行shutdownNow()。 这也将阻止将来提交任何内容,但是它具有一些不同的显着行为。 它不会开始执行已提交但尚未开始的任务。 它们将在返回的列表中。 它还将尝试停止或更准确地说是当前正在执行任务的Thread.interrupt() 。 这是最大的努力,不能保证成功完成这些任务。

线程工厂

稍后,我们将进入java.util.concurrent.Executors构建器类,该类可以创建各种线程池配置,但首先让我们集中讨论使用ThreadFactory。 您将需要利用Executor中ThreadFactory支持,并养成提供自己的习惯。 默认的ThreadFactory将为您提供一个递增编号的池命名方案,这在日志或其他监视中并不是很有用。 对于创建的第一个池,您将获得名为pool-1-thread-1pool-1-thread-2的线程 ,第二个以pool-2-thread-1开头的线程 ,等等。通过提供自己的ThreadFactory ,您可以具有名为ReportProcessingThread1HttpThread1的线程。 这是一个简单的例子:

private AtomicLong counter = new AtomicLong();
private String name;
public Thread newThread(Runnable r) {Thread t = new Thread(r);t.setName(name + counter.incrementAndGet());return t;
}

仅当创建新线程时才调用ThreadFactory 。 鉴于JDK线程池将尽可能重用线程,因此不能使用此类来管理执行的开始。

执行器生成器方法

现在回到Executors实用程序构建器方法。 他们是:

  • newCachedThreadPool()将为您提供一个线程池,该线程池将在可能的情况下重用线程,并根据需要创建新线程,而没有配置的限制。
  • newFixedThreadPool(int nThreads)将为您提供一个线程池,该线程池将仅使用指定数量的线程,但将接受与提交的任务一样多的任务,以便按提交顺序运行它们。
  • newScheduledThreadPool(int corePoolSize)专门用于按延迟执行的周期性计划来调度执行延迟的线程。 返回的线程池实现ScheduledExecutorService ,该服务公开了其他调度方法schedule(Runnable命令,长延迟,TimeUnit单位)scheduleAtFixedRate(Runnable命令,长initialDelay,长周期,TimeUnit单位)scheduleWithFixedDelay(Runnable命令,长initialDelay,长延迟, TimeUnit单位)
  • newSingleThreadExecutor()newSingleThreadScheduledExecutor() 。 这些对可以提交的任务数量没有限制,仅确保一次执行单个线程/任务。

最后,有一些帮助方法可用于从Runnable创建Callable实例。 这使我们进入了新创建的结构中,该结构允许线程引发Exception和返回值,这是我们以前不得不非常痛苦地解决的问题。 在下一篇文章中,我们将考虑这些以及它们如何与这些线程池一起使用。

参考: Java并发第3部分–来自我们的JCG合作伙伴的Carfey Software博客上的 线程池 。

相关文章 :
  • Java并发教程–信号量
  • Java并发教程–重入锁
  • Java并发教程–可调用,将来
  • Java并发教程–阻塞队列
  • Java并发教程– CountDownLatch
  • Exchanger和无GC的Java
  • Java Fork / Join进行并行编程
  • 使用迭代器时如何避免ConcurrentModificationException
  • 改善Java应用程序性能的快速技巧

翻译自: https://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-thread-pools.html

Java并发教程–线程池相关推荐

  1. Java 并发编程 -- 线程池源码实战

    一.概述 小编在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写的太简单,只写了一点皮毛,要么就是是晦涩难懂,看完之后几乎都 ...

  2. java线程池并发_Java并发教程–线程池

    java线程池并发 Java 1.5中提供的最通用的并发增强功能之一是引入了可自定义的线程池. 这些线程池使您可以对诸如线程数,线程重用,调度和线程构造之类的东西进行大量控制. 让我们回顾一下. 首先 ...

  3. Java并发编程——线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  4. java workerdone_【架构】Java并发编程——线程池的使用

    前言 如果我们要使用线程的时候就去创建一个,这样虽然非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为 ...

  5. 灵魂发问,Java并发和线程池,只言片语真的可以讲清楚吗?

    线程池 最近看到线程池,被里边乱七八槽的参数给搞晕了,你能不能给我讲讲呀? 对于从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频 ...

  6. 灵魂发问!Java并发和线程池,只言片语真的可以讲清楚吗?

    线程池 最近看到线程池,被里边乱七八槽的参数给搞晕了,你能不能给我讲讲呀? 对于从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频 ...

  7. Java 并发总结——线程池

    一.线程池 在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程 (1)线程池的作用 1.降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 2.提高响应 ...

  8. Java并发:线程池详解(ThreadPoolExecutor)

    前言 现在在实现异步时,基本都是使用线程池来实现,线程池在工作应用的还是比较频繁的,本文将就线程池的使用.相关原理和主要方法源码进行深入讲解学习. 线程池的基本使用 package com.joonw ...

  9. Java并发编程——线程池初步

    概述: 线程池机制是事先创建一些线程等待服务端程序的调用,这些线程保存在一个数组结构中,称为"线程池".当服务器有任务执行时,就从线程池中取出一个线程并给其分配任务,当线程任务执行 ...

最新文章

  1. php类的测试用例,快速入门:集成 PHPUnit 编写测试用例
  2. 第十七届全国大学生智能车竞赛智能视觉组培训第一弹
  3. android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事
  4. OpenCV Features2D和全息照相法查找已知物体
  5. python shelve模块_python3 shelve模块的详解
  6. java中单列集合的根接口是_java 单列集合总结
  7. ABAP Netweaver Webcontent path的determine逻辑
  8. Codeforces Round #746 (Div. 2)
  9. 建立管理SQL Server登录帐户
  10. 销售与顾客的PV同步算法
  11. YYText学习之根据range设置text的颜色和边框
  12. 基于SSM的图书馆管理系统
  13. LaTex 箭头上添加文字
  14. isb 汇编_DSB,ISB,DMB指令
  15. 微信小程序map中polyline的坑
  16. python atm银行取款系统_python ATM机 案例代码
  17. 汽车自动泊车辅助系统APA(上)
  18. DFS,BFS和迭代加深的联系与区别
  19. 杰理AD6973D4作用普通mcu
  20. SAP物料移动科目确认由浅入深无敌大解析

热门文章

  1. 机器学习java_Java机器学习,第1部分
  2. 朝着理想坚实迈进_坚实原则:单一责任原则
  3. gc垃圾收集器 与gc算法_GC解释:收集器概述
  4. 应行家算法_一些行家技巧和窍门
  5. aws sqs_AWS SQS和Spring JMS集成
  6. 侦听127.0.01_Spring 4.2中由注释驱动的事件侦听器
  7. Java命令行界面(第30部分):观察
  8. 平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
  9. Guavate:桥接Guava和Java8的微型库
  10. 使用tinylog 1.1改进您在Java EE应用程序中的登录