Java并发教程–线程池
首先,线程池。 让我们直接进入java.util.concurrent.ExecutorService ,它为我们提供了线程池的基本接口。 所有线程池都允许提交Callable或Runnable实例以供将来执行。 它们还提供各种池管理方法。
泳池管理
池存在各种管理方法。 您可以使用shutdown()池,该池将拒绝将来的所有提交,但将完全处理进程内执行,甚至还包括尚未开始但在关闭启动之前提交的进程。 您还可以更积极地执行shutdownNow()。 这也将阻止将来提交任何内容,但是它具有一些不同的显着行为。 它不会开始执行已提交但尚未开始的任务。 它们将在返回的列表中。 它还将尝试停止或更准确地说是当前正在执行任务的Thread.interrupt() 。 这是最大的努力,不能保证成功完成这些任务。
线程工厂
稍后,我们将进入java.util.concurrent.Executors构建器类,该类可以创建各种线程池配置,但首先让我们集中讨论使用ThreadFactory。 您将需要利用Executor中的ThreadFactory支持,并养成提供自己的习惯。 默认的ThreadFactory将为您提供一个递增编号的池命名方案,这在日志或其他监视中并不是很有用。 对于创建的第一个池,您将获得名为pool-1-thread-1 , pool-1-thread-2的线程 ,第二个以pool-2-thread-1开头的线程 ,等等。通过提供自己的ThreadFactory ,您可以具有名为ReportProcessingThread1和HttpThread1的线程。 这是一个简单的例子:
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并发教程–线程池相关推荐
- Java 并发编程 -- 线程池源码实战
一.概述 小编在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写的太简单,只写了一点皮毛,要么就是是晦涩难懂,看完之后几乎都 ...
- java线程池并发_Java并发教程–线程池
java线程池并发 Java 1.5中提供的最通用的并发增强功能之一是引入了可自定义的线程池. 这些线程池使您可以对诸如线程数,线程重用,调度和线程构造之类的东西进行大量控制. 让我们回顾一下. 首先 ...
- Java并发编程——线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- java workerdone_【架构】Java并发编程——线程池的使用
前言 如果我们要使用线程的时候就去创建一个,这样虽然非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为 ...
- 灵魂发问,Java并发和线程池,只言片语真的可以讲清楚吗?
线程池 最近看到线程池,被里边乱七八槽的参数给搞晕了,你能不能给我讲讲呀? 对于从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频 ...
- 灵魂发问!Java并发和线程池,只言片语真的可以讲清楚吗?
线程池 最近看到线程池,被里边乱七八槽的参数给搞晕了,你能不能给我讲讲呀? 对于从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频 ...
- Java 并发总结——线程池
一.线程池 在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程 (1)线程池的作用 1.降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 2.提高响应 ...
- Java并发:线程池详解(ThreadPoolExecutor)
前言 现在在实现异步时,基本都是使用线程池来实现,线程池在工作应用的还是比较频繁的,本文将就线程池的使用.相关原理和主要方法源码进行深入讲解学习. 线程池的基本使用 package com.joonw ...
- Java并发编程——线程池初步
概述: 线程池机制是事先创建一些线程等待服务端程序的调用,这些线程保存在一个数组结构中,称为"线程池".当服务器有任务执行时,就从线程池中取出一个线程并给其分配任务,当线程任务执行 ...
最新文章
- php类的测试用例,快速入门:集成 PHPUnit 编写测试用例
- 第十七届全国大学生智能车竞赛智能视觉组培训第一弹
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事
- OpenCV Features2D和全息照相法查找已知物体
- python shelve模块_python3 shelve模块的详解
- java中单列集合的根接口是_java 单列集合总结
- ABAP Netweaver Webcontent path的determine逻辑
- Codeforces Round #746 (Div. 2)
- 建立管理SQL Server登录帐户
- 销售与顾客的PV同步算法
- YYText学习之根据range设置text的颜色和边框
- 基于SSM的图书馆管理系统
- LaTex 箭头上添加文字
- isb 汇编_DSB,ISB,DMB指令
- 微信小程序map中polyline的坑
- python atm银行取款系统_python ATM机 案例代码
- 汽车自动泊车辅助系统APA(上)
- DFS,BFS和迭代加深的联系与区别
- 杰理AD6973D4作用普通mcu
- SAP物料移动科目确认由浅入深无敌大解析
热门文章
- 机器学习java_Java机器学习,第1部分
- 朝着理想坚实迈进_坚实原则:单一责任原则
- gc垃圾收集器 与gc算法_GC解释:收集器概述
- 应行家算法_一些行家技巧和窍门
- aws sqs_AWS SQS和Spring JMS集成
- 侦听127.0.01_Spring 4.2中由注释驱动的事件侦听器
- Java命令行界面(第30部分):观察
- 平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
- Guavate:桥接Guava和Java8的微型库
- 使用tinylog 1.1改进您在Java EE应用程序中的登录