core币的销毁机制 JAVA架构之线程池是怎样工作的?
JAVA架构之线程池是怎样工作的?
通俗易懂的给你解释一下,池塘里有很多鱼,我们捞一条上来**一番,**一段时间后放回池塘里去。这就是线程池的工作原理,只不过这个池塘里放的不是鱼,是一个个线程对象,用到一个就拿一个,用完放回池塘内,而这个池塘在计算机内就是对应在软件的内存中了。
java.util.concurrent包中我们能找到线程池的定义,其中ThreadPoolExecutor是我们线程池核心类,首先看看线程池类的主要参数有哪些。
corePoolSize:线程池的核心大小,也可以理解为**的线程池大小。
maximumPoolSize:**线程池大小。
keepAliveTime:空余线程存活时间,指的是超过corePoolSize的空余线程达到多长时间才进行销毁。
unit:销毁时间单位。
workQueue:存储等待执行线程的工作队列。
threadFactory:创建线程的工厂,一般用默认即可。
handler:拒绝策略,当工作队列、线程池全已满时如何拒绝新任务,默认抛出异常。
线程池工作流程
1、如果线程池中的线程小于corePoolSize时就会创建新线程直接执行任务。
2、如果线程池中的线程大于corePoolSize时就会暂时把任务存储到工作队列workQueue中等待执行。
3、如果工作队列workQueue也满时:当线程数小于**线程池数maximumPoolSize时就会创建新线程来处理,而线程数大于等于**线程池数maximumPoolSize时就会执行拒绝策略。
ThreadPool工作原理任务先去核心线程池,如果核心线程池没有则存入到Q中;Q满了去启新的线程(启新线程时会全局锁),不能启的话就返回错误需要多了解些,参数配置和使用结合。
线程池存活时间设置多久比较好?
设置60秒比较好,keepAliveTime(线程存活保持时间)作用:当线程池中线程数大于核心线程数时,线程的空闲时间如果超过线程存活时间,那么这个线程就会被销毁,直到线程池中的线程数小于等于核心线程数。
缓存线程池,缓存的线程默认存活60秒。
线程的核心池corePoolSize大小为0,核心池**为Integer.MAX_VALUE,阻塞队列使用的是SynchronousQueue。是一个直接提交的阻塞队列, 他总会迫使线程池增加新的线程去执行新的任务。在没有任务执行时,当线程的空闲时间超过keepAliveTime(60秒),则工作线程将会终止被回收,当提交新任务时
志强系列的CPU和i3、i5、i7这些有什么区别吗?
志强系列是服务器的cpu属于洋垃圾的范畴,是国外企业用过三年的cpu过了保修期后当垃圾被**进口销毁的,但是这些cpu还是可以用的,所以商人把这些洋垃圾当正常的cpu买,自然就便宜。i357都是普通的cpu面向的是个人,服务器cpu是以x e开头的,个人用cpu是以 i g开头的。如果讲究性价比服务器cpu还是可以的,不过别被奸商给坑了就是了。e x自己组装是可以的,但是价格要适中,不要用买i g的价格买这些洋垃圾。