- 浏览: 52325 次
- 性别:
- 来自: 杭州
文章分类
最新评论
CPU密集型任务:应用主要是使用非常多的cup资源,进行无阻塞的逻辑运算,所以需要避免过多的线程上下文切换。所以线程数范围为:
线程数 = CPU核数+1
也可以设置成CPU核数*2,这还是要看JDK的使用版本,以及CPU配置(服务器的CPU有超线程)。对于JDK1.8来说,里面增加了一个并行计算,计算密集型的较理想线程数 = CPU内核线程数*2
IO密集型任务:是相对于IO操作比CPU计算操作占用更多的CPU时间来说的。如大部分的web应用开发会涉及到大量的网络传输;不仅如此,与数据库或是缓存间的交互也涉及到IO。一旦发生IO,就会使线程处于等待状态,所以我们可以稍微设置多一些线程池中线程的数量,这样就能让在等待IO的这段时间内,线程可以去做其它事,提高并发处理效率。
线程池中线程数范围为:
线程数 = CPU核心数/(1-阻塞系数)
这个阻塞系数一般为0.8~0.9之间,也可以取0.8或者0.9。以上不是绝对的,需要根据实际情况以及实际业务来调整。
线程数 = CPU核数+1
也可以设置成CPU核数*2,这还是要看JDK的使用版本,以及CPU配置(服务器的CPU有超线程)。对于JDK1.8来说,里面增加了一个并行计算,计算密集型的较理想线程数 = CPU内核线程数*2
IO密集型任务:是相对于IO操作比CPU计算操作占用更多的CPU时间来说的。如大部分的web应用开发会涉及到大量的网络传输;不仅如此,与数据库或是缓存间的交互也涉及到IO。一旦发生IO,就会使线程处于等待状态,所以我们可以稍微设置多一些线程池中线程的数量,这样就能让在等待IO的这段时间内,线程可以去做其它事,提高并发处理效率。
线程池中线程数范围为:
线程数 = CPU核心数/(1-阻塞系数)
这个阻塞系数一般为0.8~0.9之间,也可以取0.8或者0.9。以上不是绝对的,需要根据实际情况以及实际业务来调整。
发表评论
-
流未关闭导致调用delete方法删除失败
2017-11-02 20:00 549public static void main(String[ ... -
fastjson空值不处理
2017-09-21 15:21 0fastjson在处理对象转化为json串的时候,对于字段值为 ... -
java位运算
2017-09-19 10:05 494java位运算符 位运算符主要针对二进制,针对的是两个二 ... -
java final作用
2017-09-14 09:12 408final关键字的作用 1、被final修饰的类不可以被继承 ... -
System.getProperty使用
2017-07-23 15:27 823java的System.getProperty()方 ... -
Java如何获取当前的jar包路径
2017-07-23 12:28 2569最近在写一个可运行的jar包,需要从导出后跟jar同级目录读取 ... -
循环遍历集合过程中往集合添加或是删除元素报java.util.ConcurrentModificationException
2017-05-15 19:16 0java.util.ConcurrentModificatio ... -
图片压缩场景选择
2017-04-18 19:00 3951、平台上传图片,但是图片大小不确定(不会超过50M),后台处 ... -
PropertyUtils复制属性报错
2017-05-02 19:46 558java.lang.IllegalArgumentExcept ... -
ThreadLocal实现共享对象
2017-04-16 19:56 452当考虑到每个线程共享多个变量时,需要定义多个ThreadLoc ... -
通过jdk自带的反编译工具命令 javap
2017-04-10 09:39 0通过jdk自带的反编译工具命令 javap 可以查看class ... -
属性命名不遵守javaBean规范导致版本升级后获取不到值
2017-04-01 17:03 447如下所示: struts2 Action中存在如下定义的i ... -
bat批处理命令运行jar包中的main方法
2017-04-01 11:08 1507一、Eclipse导出可运行的 ... -
项目中jdk高版本编译后的代码在低版本的jdk运行报错
2017-03-23 16:10 983项目中jdk高版本编译后的代码运行在低版本的jdk的tomca ... -
java 获取同一个网关下不同客户端的ip失败
2017-03-31 20:11 653java 获取同一个网关下不同客户端的ip,得到的客户端的ip ... -
程序中解析域名报错
2017-03-16 09:00 699项目中通过webservice接口往第三方传送数据,本地配置是 ... -
服务器推送技术简单介绍
2017-03-12 19:01 0传统模式的 Web 系统以 ... -
java中调用语音库
2016-12-25 18:30 675java中调用语音库参考http://blog.csdn.ne ... -
非技术
2015-07-24 15:52 0近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分 ...
相关推荐
1. 根据任务特性选择合适的线程池类型,如CPU密集型任务选择固定大小线程池,I/O密集型任务选择有界的线程池。 2. 设置合理的线程池参数,如核心线程数、最大线程数和队列大小,确保线程池既能高效利用资源,又能...
Java线程池是Java并发编程中的重要组成部分,它允许开发者管理多个线程并有效地调度任务。线程池通过ThreadPoolExecutor类实现,这是一个高度可配置的工具,能够根据具体需求定制线程的创建、管理和销毁策略。 ...
- **高性能**:针对CPU密集型任务进行了优化,特别适合执行大量细粒度的任务。 #### 三、Future `Future`接口提供了获取异步计算结果的能力,它是Java并发编程中重要的API之一。 ##### 3.1 FutureTask `...
例如,对于CPU密集型任务,线程池的大小可能接近于处理器的核数,而对于I/O密集型任务,线程池可能需要更大,因为I/O操作时线程通常是阻塞的,此时更多的线程可以处理其他I/O请求。 总之,线程池是Java并发编程中...
对于CPU密集型任务,线程池大小应接近CPU核心数,而对于I/O密集型任务,可能需要更大的线程池以充分利用等待I/O操作的时间。 5. **并行处理**:在Java中,可以使用ExecutorService来实现并行处理,将大任务拆分为小...
1. CPU密集型任务:线程池大小接近CPU核心数,充分利用多核优势。 2. I/O密集型任务:线程池大小可稍大于CPU核心数,因为I/O操作时线程可以切换执行其他任务。 3. 任务特性:根据任务执行时间、并发量等因素综合评估...
《Java并发编程实战》是Java并发编程领域的一本经典图书,涵盖了Java中多线程编程的诸多高级概念和实践技巧。该书不仅介绍了并发编程的基本原理,还包括了各种并发工具的使用方法、常见的并发问题及其解决方案、以及...
比如,对于CPU密集型任务,应使用无界队列;而对于I/O密集型任务,则可以使用有界队列,以防止I/O阻塞时任务队列无限增长。 关于阻塞队列,它是一种特殊的队列,在多线程应用中用于线程间传递数据。阻塞队列的一个...
- 优势:能够显著提升程序的执行效率,特别是对于CPU密集型或IO密集型任务。 - Java中的实现:通过继承`Thread`类或实现`Runnable`接口创建线程。 ### Java并发编程基础 1. **线程安全**: - 定义:当多个线程...
根据CPU密集型或IO密集型任务的特点,选择合适的线程池类型和线程数至关重要。 总之,理解和熟练运用线程池是成为一名高效并发编程者的必备技能。合理使用线程池不仅可以提升系统性能,还能增强程序的可维护性和...
随着互联网应用规模的不断扩大,现代应用面临着高并发请求、CPU密集型操作、I/O密集型处理以及大数据量和计算需求的挑战。为了满足这些需求,开发者需要利用多线程与并发编程来提高程序的响应速度和吞吐能力。通过...
Java线程池是Java并发编程中的重要组成部分,它在多线程环境下的资源管理和任务调度中扮演着核心角色。线程池通过预先创建并管理一组线程,避免了频繁创建和销毁线程带来的开销,提高了系统性能。本文将深入探讨Java...
Java并发编程涉及对多个线程的管理和协调,使得它们能够有效地共享资源并行执行任务。本文将深入探讨Java并发编程的基础概念、核心机制以及常见应用场景,帮助开发者更好地理解和掌握Java并发编程。 #### 一、并发...
线程池是一种线程使用模式,它预先创建了一组线程,当有任务需要执行时,从线程池中取出一个空闲线程来执行任务,完成后线程不被销毁,而是回到线程池中等待下一次任务分配。线程池可以控制系统的资源消耗,避免大量...
并发编程 并发编程夺命连环问 JUC 什么是死锁?如何避免死锁?...CPU密集型 IO密集型 线程池中阻塞队列的作用是什么?为什么是先添加队列而不是先创建最大线程? 谈谈线程的生命周期?线程有哪些状
同时,对于需要大量IO操作或计算密集型的任务,Amino的并发管理能够充分利用多核CPU,提高程序的运行效率。 为了更好地理解和使用Amino,我们可以查看提供的源码。cbbs-java-src-0.2.0.tar.gz这个文件包含的就是...
Java线程池是Java并发编程中的重要组成部分,它在多线程编程中扮演着至关重要的角色,有效地管理和调度线程资源,提高了程序的性能和稳定性。本文将深入探讨Java线程池的概念、工作原理以及如何在实际开发中运用。 ...
【Linux 线程池】 线程池是操作系统或编程语言中的一种并发处理机制,它...正确地使用线程池,可以避免线程频繁创建和销毁的开销,降低系统资源消耗,提升系统整体性能,尤其对于高并发和I/O密集型应用来说尤为重要。
在Java并发编程中,还涉及到多种并发工具类,例如同步容器类和并发容器类。同步容器类使用同步锁来保证线程安全,但可能会影响性能。并发容器类ConcurrentHashMap和CopyOnWriteArrayList等,采用细粒度的锁和弱一致...
10. **网络通信优化**:对于网络密集型应用,优化网络通信,如使用NIO(非阻塞I/O)代替BIO,可以提高并发能力,降低延迟。 通过深入理解并实践这些Java优化编程技巧,开发者可以显著提升应用程序的运行效率,减少...