`

Oracle官方并发教程之线程池

阅读更多

Oracle官方并发教程之线程池

 

在java.util.concurrent包中多数的执行器实现都使用了由工作线程组成的线程池,工作线程独立于所它所执行的Runnable任务和Callable任务,并且常用来执行多个任务。

使用工作线程可以使创建线程的开销最小化。在大规模并发应用中,创建大量的Thread对象会占用占用大量系统内存,分配和回收这些对象会产生很大的开销。

 

一种最常见的线程池是固定大小的线程池。这种线程池始终有一定数量的线程在运行,如果一个线程由于某种原因终止运行了,线程池会自动创建一个新的线程来代替它。需要执行的任务通过一个内部队列提交给线程,当没有更多的工作线程可以用来执行任务时,队列保存额外的任务。

使用固定大小的线程池一个很重要的好处是可以实现优雅退化。例如一个Web服务器,每一个HTTP请求都是由一个单独的线程来处理的,如果为每一个HTTP都创建一个新线程,那么当系统的开销超出其能力时,会突然地对所有请求都停止响应。如果限制Web服务器可以创建的线程数量,那么它就不必立即处理所有收到的请求,而是在有能力处理请求时才处理。

创建一个使用线程池的执行器最简单的方法是调用java.util.concurrent.ExecutorsnewFixedThreadPool方法。Executors类还提供了下列一下方法:

  • newCachedThreadPool方法创建了一个可扩展的线程池。适合用来启动很多短任务的应用程序。
  • newSingleThreadExecutor方法创建了每次执行一个任务的执行器。
  • 还有一些创建ScheduledExecutorService执行器的方法。

如果上面的方法都不满足需要,可以尝试java.util.concurrent.ThreadPoolExecutor或者java.util.concurrent.ScheduledThreadPoolExecutor

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Oracle官方并发教程之线程池

分享到:
评论

相关推荐

    java8集合源码分析-The-Road-To-Bald-Man:Java技能加点,秃顶之路

    线程池 锁 并发容器 原子类 JUC并发工具类 网络编程 新特性 JVM 类加载机制 字节码执行机制 JVM内存模型 GC垃圾回收 JVM性能监控与故障定位 JVM调优 二、数据结构和算法 数据结构 字符串 数组 链表 二叉树 堆、栈、...

    如何更好的进行性能测试和调优?

    怎样发现影响系统并发的瓶颈,个人认为如在前台,拐点论是一种的方式,而后台方面,可以对oracle非空闲等待事件的分析来切入。在并发下,如何保证数据的一致性,也是一个不得不考虑的问题;前台;为了保证线程安全性,...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    线程并发库和线程池的作用?.mp4 │ Java面试题15.设计模式和常用的设计模式.mp4 │ Java面试题16.http get post请求的区别.mp4 │ Java面试题17.说说你对Servlet的理解.mp4 │ Java面试题18.Servlet的生命周期.mp4 ...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    线程并发库和线程池的作用 Java面试题15.设计模式和常用的设计模式 Java面试题16.http get post请求的区别 Java面试题17.说说你对Servlet的理解 Java面试题18.Servlet的生命周期 Java面试题19.Servlet中forward和...

    异步并行加载工具Asyncload.zip

    单次请求的响应时间在50ms左右,所以tps也不会太高,测试环境压力测试过程,受限于环境因素撑死只能到200tps,20并发下。I/O目前一般的I/O的访问速度: L1 > L2 > memory -> disk or network常见的IO:nas上文件 ...

    Java多线程–让主线程等待所有子线程执行完毕

    朋友让我帮忙写个程序从文本文档中导入数据到oracle数据库中,技术上没有什么难度,文档的格式都是固定的只要对应数据库中的字段解析行了,关键在于性能。  数据量很大百万条记录,因此考虑到要用多线程并发执行...

    parallel-meanshift:Java语言中的并行手段命中计划

    在Ubuntu上安装Java 8:sudo add-apt-repository ppa:webupd8team / java sudo apt-get更新sudo apt-get安装oracle-java8-installer 在Ubuntu上安装maven:apt-get install mvn 为了进行概要分析,我们使用并推荐...

    java8源码-ffmpeg-web-pusher:基于FFmpeg、SpringBoot、JavaCV开发的远程推流服务,可通过http-a

    使用Java线程池技术,支持并发推流 使用,相比直接调用ffmpeg命令行,更加灵活,支持更多的定制。 容器化部署,简化部署流程 使用 1. 容器部署 由于同时需要java8以及ffmpeg环境,为了部署方便,通过容器的方式简化...

    百万商业圈 .NET 开发框架及开发框架API说明书 核心库

    框架核心API库 包括:与Discuz相关的集成登陆,Evaluator计算表达式,Excel相关处理,Pdf处理,Msmq消息队列处理,ThreadPool(线程池,用于并发处理) 3、FrameWork.Extension.Toolkit.dll 针对DotNet基类扩展方法核心...

    java微信公众号MVC开发框架

    缺省线程池的大小是10个,如果微信公众并发比较频繁,我们可以调整线程池的大小,以提高处理效率。 如果我们调整线程池大小为100,可以采用如下配置: <!-- 设置消息key缓存清理间隔,单位秒 --> ...

    javaSE代码实例

    第16章 多线程——Java中的并发协作 343 16.1 线程的基本知识 343 16.1.1 多线程编程的意义 343 16.1.2 定义自己的线程 344 16.1.3 创建线程对象 345 16.1.4 启动线程 347 16.1.5 同时使用多个线程 ...

Global site tag (gtag.js) - Google Analytics