java线程池并发

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实例。 这使我们进入了新创建的结构中,该结构允许线程抛出异常并返回值,这在我们之前非常痛苦的解决。 在下一篇文章中,我们将考虑这些以及它们如何与这些线程池一起使用。

参考: 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线程池并发

java线程池并发_Java并发教程–线程池相关推荐

  1. java等待5秒_Java并发编程-主线程等待子线程解决方案

    主线程等待所有子线程执行完成之后,再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { System.ou ...

  2. java线程池教程_Java基础教程——线程池

    启动新线程,需要和操作系统进行交互,成本比较高. 使用线程池可以提高性能-- 线程池会提前创建大量的空闲线程,随时待命执行线程任务.在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务.(这 ...

  3. java 线程假醒_Java并发基础05. 传统线程同步通信技术

    先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次--如此往返执行50次. 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首 ...

  4. 用java实现combin函数_Java并发工具类CompletableFuture教程与示例

    Java 8带来了大量的新功能和增强功能,例如Lambda表达式,Streams,CompletableFutures等.在本文中,我将通过简单的示例向您详细说明CompletableFuture及其 ...

  5. java中的让步_java基本教程之线程让步 java多线程教程

    本章涉及到的内容包括: 1. yield()介绍 2. yield()示例 3. yield() 与 wait()的比较 1. yield()介绍 yield()的作用是让步.它能让当前线程由&quo ...

  6. 线程停止继续_Java并发学习第二弹:如何正确停止线程?

    线程停止的原则:使用interrupt来通知,而不是强制停止线程 interrupt在英文中实为通知的意思,那么为什么停止线程不直接停止而使用通知呢? 这是因为在java中,我们如果想要停止一个线程, ...

  7. java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家取排队本着先来 ...

  8. Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...

  9. java中解决脏读_java并发编程学习之脏读代码示例及处理

    使用interrupt()中断线程     当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即 ...

最新文章

  1. Word2010开发——操作文档
  2. linux 下jdk的卸载与安装
  3. 2016计算机课程设计,2016年计算机组成原理课程设计-硬布线控制器的设计.doc
  4. boost::log::expressions::has_attr用法的测试程序
  5. 将MyEclipse项目导入到Eclipse中
  6. Cloud一分钟 | 微软Azure云服务宣布又一重磅应用落地;微软云计算转型迅猛,或助其市值短期达到1万亿美元...
  7. 【转载】TreeView序列化,TreeView串行化,TreeView反序列化 c# winform
  8. python全免费教程-python教程免费
  9. VS2010安装教程
  10. 有效解决鼠标问题的驱动工具-罗技G502游戏鼠标驱动程序提供下载
  11. Marquee首尾相连不间断移动 开始完全显示
  12. css3实现动画的三种方式
  13. java adobe pdf转word_adobe reader如何把PDF转换成word?adobe reader把PDF转换成word教程
  14. 计算机视觉与深度学习(8)
  15. 《阿特拉斯耸耸肩》节选:互害与甩锅的反敏捷组织
  16. 巧妙去除Word文档修订和批注帮助
  17. 芯准TSN系统的测试与验证(1)——测试环境配置
  18. 车载通信与导航(五):D2D通信流程
  19. 基于单片机的测量心率脉搏健康系统设计与
  20. Spring核心机制IoC与AoP梳理

热门文章

  1. 来自一位家长的肺腑之言,句句在理!!!
  2. java实现动态验证码源代码——jsp页面
  3. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
  4. 道指mt4代码_剑指offer算法题052:正则表达式匹配
  5. python大神交流网站_学习Python必去的8个网站
  6. java客户端作为kafka消费者测试
  7. 完整的MIME类型列表
  8. 机器学习评价指标大汇总
  9. java的几种对象(PO,VO,DAO,BO,POJO)解释
  10. 二叉堆的操作总结(insert+deleteMin+increaseKey+decreaseKey+percolateDown+percolateUp)