首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java线程参数配置

大家好,又见面了,我是你们朋友全栈君。 在线程实际使用中,参数配置总让人难以把握。在网上搜了一下,主要有以下方案。跟大家分享。 1....基本分析法 要想合理配置线程,就必须首先分析任务特性,可以从以下几个角度来进行分析: 任务性质:CPU密集型任务,IO密集型任务和混合型任务。 任务优先级:高,中和低。...2.1.1 CPU密集型任务 CPU密集型任务配置尽可能少线程数量,如配置cpu核数+1个线程能够实现最优CPU利用率,+1是保证当线程由于页缺失故障(操作系统)或其它原因导致暂停时,额外这个线程就能顶上去...则配置尽可能多线程,利用多线程提高CPU利用率。...2.4 依赖数据库连接任务 依赖数据库连接任务,因为线程提交SQL后需要等待数据库返回结果,如果等待时间越长CPU空闲时间就越长,那么线程数应该设置越大,这样才能更好利用CPU。

92530

Java 线程配置常见误区

,所以线程化在各种语言内都有实践,当然在 Java 语言中线程是也非常重要一部分,有 Doug Lea 大神对线程封装,我们使用时候是非常方便,但也可能会因为不了解其具体实现,对线程配置参数存在误解...前言 由于线程创建和销毁对操作系统来说都是比较重量级操作,所以线程化在各种语言内都有实践,当然在 Java 语言中线程是也非常重要一部分,有 Doug Lea 大神对线程封装,我们使用时候是非常方便...,但也可能会因为不了解其具体实现,对线程配置参数存在误解。...模型,我们可能会认为如果配置了足够消费者,线程就不会有任何问题。...参考文献: Java 线程实现原理及其在美团业务中实践

49720
您找到你想要的搜索结果了吗?
是的
没有找到

JAVA乐观锁_spring线程配置

Javajava.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁一种实现方式CAS实现。...以 java.util.concurrent 中 AtomicInteger 为例,看一下在不使用锁情况下是如何保证线程安全。...concurrent包实现:     由于javaCAS同时具有 volatile 读和volatile写内存语义,因此Java线程之间通信现在有了下面四种方式:       1....TLAB:如果使用CAS其实对性能还是会有影响,所以JVM又提出了一种更高级优化策略:每个线程Java堆中预先分配一小块内存,称为本地线程分配缓冲区(TLAB),线程内部需要分配内存时直接在TLAB...虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB参数来进行配置(jdk5及以后版本默认是启用TLAB)。

35130

Java线程如何合理配置核心线程

我相信大家都用过线程,但是线程数量设置为多少比较合理呢? 线程设置最主要目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序性能,因此让我们一起去探索吧!...首先要考虑到 CPU 核心数,那么在 Java 中如何获取核心线程数?...对于 IO 密集型计算场景,最佳线程数是与程序中 CPU 计算和 IO 操作耗时比相关,《Java并发编程实战》作者 Brain Goetz 推荐计算方法如下: 线程数 = CPU 核心数 *...在这里引用Java并发编程实战中图,方便大家更容易理解: 还有一派计算方式是《Java虚拟机并发编程》中提出线程数 = CPU 核心数 / (1 - 阻塞系数) 其中计算密集型阻塞系数为 0...同时,有很多线程应用,比如 Tomcat、Redis、Jdbc 等,每个应用设置线程数也是不同,比如 Tomcat 为流量入口,那么线程设置可能就要比其他应用要大。

3.1K20

Java线程_Java线程大小与线程死锁

Java线程大小与线程死锁 优化线程大小 线程大小对系统性能是有一定影响,过大或者过小都会无法发挥最优系统性能, 线程大小不需要非常精确,只要避免极大或者极小情况即可, 一般来说,线程大小需要考虑...在书中给出一个估算线程大小公式: 线程大小 = CPU数量 * 目标CPU使用率*( 1 + 等待时间与计算时间比) 线程死锁 如果在线程池中执行任务A在执行过程中又向线程提交了任务B...适合给线程提交相互独立任务,而不是彼此依赖任务. 对于彼此依赖任务,可以考虑分别提交给不同线程来执行。...Java线程异常处理 在使用ThreadPoolExecutor进行submit提交任务时,有的任务抛出了异常,但是线程并没有进行提示,即线程把任务中异常给吃掉了,可以把submit提交改为execute...执行,也可以对ThreadPoolExecutor线程进行扩展.对提交任务进行包装: package com.wkcto.threadpool; import java.util.concurrent

86840

java如何创建线程_java线程状态

请点击http://www.captainbed.net 1、为什么要用线程线程提供了一种限制和管理资源(包括执行一个任务)。每个线程还维护一些基本统计信息,例如已完成任务数量。...这里借用《Java并发编程艺术》,来说一下使用线程好处: 降低资源消耗:通过重复利用已创建线程降低线程创建和销毁造成消耗。...4、如何创建线程 《阿里巴巴Java开发手册》中强制线程不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 方式,这样处理方式让写同学更加明确线程运行规则...SingleThreadExecutor:方法返回一个只有一个线程线程。若多余一个任务被提交到该线程,任务会被保存在一个任务队列中,待线程空闲,按先入先出顺序执行队列中任务。...CachedThreadPool:该方法返回一个可根据实际情况调整线程数量线程线程线程数量不确定,但若有空闲线程可以复用,则会优先使用可复用线程

1K10

java创建线程代码_java手写线程

jdk提供了一个通过ThreadPoolExecutor创建一个线程类 构造器 使用给定参数和默认饱和策略、默认工厂方法创建线程 ThreadPoolExecutor(int corePoolSize..., 当提交一个任务到线程时候,线程会创建一个线程来执行任务,即使当前线程已经存在空闲线程,仍然会创建一个线程,等到需要执行任务数大于线程基本大小时就不再创建。...如果调用线程prestartAllCoreThreads()方法,线程会提前创建并启动所有的基本线程。...maximumPoolSizeSize 线程最大数量,线程允许创建最大线程数,如果队列满了,并且已创建线程数小于最大线程数,则线程会再创建新线程执行任务。...饱和策略 当队列和线程都满了,说明线程处于饱和状态,那么必须采取一种策略处理提交新任务。

73730

java创建线程几种方式_Java线程

Java创建线程 线程:4大方法,7大参数,4种拒绝策略 化技术:把一些能够复用东西(比如说数据库连接、线程)放到池中,避免重复创建、销毁开销,从而极大提高性能。...线程能有效管控线程,统一分配、调优,提供资源使用率; 更强大功能,线程提供了定时、定期以及可控线程数等功能线程,使用方便简单。...当线程池中线程空闲时间超过60s,则会自动回收该线程,当任务超过线程线程数则创建新线程线程大小上限为Integer.MAX_VALUE,可看作无限大。...()); 对于IO密集型任务:由于IO操作速度远低于CPU速度,那么在运行这类任务时,CPU绝大多数时间处于空闲状态,那么线程可以配置尽量多些线程,以提高CPU利用率; 对于混合型任务:可以拆分为CPU...largestPoolSize:线程曾经创建过最大线程数量,通过这个数据可以知道线程是否满过。如等于线程最大大小,则表示线程曾经满了。 getPoolSize:线程线程数量。

58340

java线程

线程能够帮助我们提高系统资源利用效率,并简化线程管理。通过并发包下Executors(不是Executor)可以方便创建如下几类线程。...首先看看线程框架图: ? 线程框架 应用与线程交互和线程内部工作过程如下图所示: ?...应用与线程交互和线程内部工作过程 其中有几个重要概念: 工作队列负责存储用户提交各个任务,这个工作队列,可以是容量为 0 SynchronousQueue(使用 newCachedThreadPool...内部线程”,这是指保持工作线程集合(是一个HashSet),线程需要在运行过程中管理线程创建、销毁。线程工作线程被抽象为静态内部类 Worker,基于AQS实现。...如果任务提交时被拒绝,比如线程已经处于 SHUTDOWN 状态或者队列已经满了,需要为其提供处理逻辑,Java 标准库提供了类似ThreadPoolExecutor.AbortPolicy等默认实现,

83420

Java线程配置由繁至简,找到适合自己天命线程(一)

换句话说,假如你需要线程去处理任务数不多,qps不高,甚至峰值也不高,未来也不会有大变化,那恭喜你,你已经找到了你真命线程,直接使用Executors.newCachedThreadPool(...罢特,我也相信,这种情况还是少,大部分人都是因为需要线程来“兜底”,也就是任务数或者任务峰值线程真的撑不住,才来查询怎么找到适合自己配置,那咱们不慌,就继续往下看。...阿里巴巴Java开发手册为什么不推荐使用Executors类自动生成几个线程池上面提到了Executors.newCachedThreadPool(),Executors相当于对线程一个工具类,系统提供了几个参数已经预设好...,一行代码就可以创建线程供开发者使用,但是《阿里巴巴Java开发手册》里却不推荐使用,这是为什么呢?...这个工具类预设几个线程,不是最大线程数是Max,就是任务队列是无界,都满足上面的条件,所以系统预设线程,手册都不建议使用。

21920

Java线程

Java线程 一、介绍 线程,顾名思义,这是管理一堆线程而出现对象。与数据库连接一致,它出现解决了线程频繁创建和销毁,从而浪费大量资源问题。...所以,线程池中有提前创建好线程,使用时直接分配获取,使用完再由线程管理是否销毁。...优点 降低资源消耗,也就是不需要重复多次创建线程 更好管理线程 比如可以获取当前运行线程是什么 还在等待执行任务有什么 二、使用线程 在JDK5起提供了线程对象,ExecutorService...和Executors 其中,ExecutorService和它子类ThreadPoolExecutor是线程关键 而Executors是对应工具类,里面有些工厂方法可以快速创建线程 查看ThreadPoolExecutor...当线程所有的线程都繁忙运行时,新添加执行任务会暂时保留至此队列 threadFactory 创建线程线程工厂 handler 拒绝策略。

48920

java线程

线程作用 线程作用就是限制系统中执行线程数量。      根据系统环境情况,可以自动或手动设置线程数量,达到运行最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。...(每个线程需要大约1MB内存,线程越多,消耗内存也就越大,最后死机);   Java里面线程顶级接口是Executor,但是严格意义上讲Executor并不是一个线程,而只是一个执行线程工具...要配置一个线程是比较复杂,尤其是对于线程原理不是很清楚情况下,很有可能配置线程不是较优,因此在Executors类里面提供了一些静态工厂,生成一些常用线程。...每次提交一个任务就创建一个线程,直到线程达到线程最大值。线程大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程会补充一个新线程。...如果线程大小超过了处理任务所需要线程,那么就会回收部分空闲(60秒不执行任务)线程,当任务数增加时,此线程又可以智能添加新线程来处理任务。

809110

Java线程

概述:         线程,从字面含义来看是管理同一组同构工作线程资源。...线程与工作队列是密切相关, 工作队列保存了所有等待执行任务, 工作线程从工作队列中获取任务并执行。         通过重用线程而不是创建线程方式, 这样做好处是: ①....它会创建一个固定长度线程, 每提交一个任务就会创建一个线程,直到达到最大线程数为止。...这时候线程规模就不会变化,需要注意是当某个线程因发生了未预期Exception而终止,这时候线程会补充一个新线程。     ②. newCachedThreadPool。...它将创建一个可缓存线程,当线程规模大于当前需要处理任务时会进行回收空闲线程, 当任务增加时会动态增加线程数,  线程规模不受限制。

79060

Java线程配置由繁至简,找到适合自己天命线程(二)

首先这里有几道经常考线程面试题:简单介绍下线程,核心数从corePoolSize 到maximumPoolSize 变化过程?线程在什么时机会执行饱和策略?...当线程任务队列满之后,就会执行对应饱和策略吗?这些问题其实说到底都是在考线程执行步骤,当你弄懂这些时机和条件后,我相信你可以融会贯通整套流程。...在经过翻查无数次资料与文章后,一篇美团在2020年发布名为《Java线程实现原理及其在美团业务中实践》文章让我眼前一亮:既然参数在每个服务器上都不确定,那我改成动态配置不就可以了吗?...但是并不妨碍网上大佬多,已经有个人开发者把这套逻辑整理出来并开源,没错,我也已经上车了,真香!如果你想了解,可以搜索“动态线程配置”这些关键词,我在这里就不打广告了。JOJO!...在实际项目运用中,结合项目情况,最好加上动态线程配置。写在最后最后其实这篇和上篇是一口气写下来,但因为篇幅原因分开,所以建议一定要连贯地看下来。

37052

Tomcat线程配置

1:配置executor属性 打开/conf/server.xml文件,在Connector之前配置一个线程: <Executor name="tomcatThreadPool" namePrefix...maxThreads="1000" maxIdleTime="300000" minSpareThreads="200"/> 重要参数说明: name:共享线程名字...这是Connector为了共享线程要引用名字,该名字必须唯一。默认值:None; namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。...这一属性为线程池中每个线程name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀后面。默认值:tomcat-exec-; maxThreads:该线程可以容纳最大线程数。...minProcessors="5" maxProcessors="75" acceptCount="1000"/> 重要参数说明: executor:表示使用该参数值对应线程

69830

java线程

4)、线程 方式 1 和方式 2:主进程无法获取线程运算结果。...,线程就会使用拒绝策略 运行流程 1、线程创建,准备好 core 数量核心线程,准备接受任务 2、新任务进来,用 core 准备好空闲线程执行。...3、常见 4 种线程   newCachedThreadPool  创建一个可缓存线程,如果线程长度超过处理需要,可灵活回收空闲线程,若 无可回收,则新建线程。...4、开发中为什么使用线程  降低资源消耗  通过重复利用已经创建好线程降低线程创建和销毁带来损耗  提高响应速度  因为线程池中线程数没有超过线程最大上限时,有的线程处于等待分配任务...无限创建和销毁线程不仅消耗系统资源,还降低系统稳定性,使 用线程进行统一分配

13830
领券