Java线程池的核⼼参数有哪些?
java线程池创建的四种Java线程池的核⼼参数有哪些?
1、corePoolSize
核⼼线程数,即就是中线程池中长时间稳定存活的线程数
2、maxPoolSize
最⼤线程数,重点强调线程中最⼤可包含的线程数。最⼤线程数的上限需要根据实际情况⽽定
3、keepAliveTime
线程的存活时间,该参数是指⾮核⼼线程的存活时间,⽤来严格控制线程池中线程的数量尽可能的保持在⼀定的范围内,若要修改核⼼线程的存活时长,可参考相关参数
4、时间单位
TimeUnit.SECONDS:秒
5、队列容量⼤⼩
1.直接交换:SynchronousQueue,任务不多,是没有容量的,maxPoolSize需要⼤⼀点
2.⽆界队列:LinkedBlockingQueue,可产⽣OOM
3.有界队列:ArrayBlockingQueue
6、拒绝策略
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前⾯的任务,然后重新提交被拒绝的任务ThreadPoolExecutor.CallerRunsPolicy:由调⽤线程(提交任务的线程)处理该任务
⼆、代码
package;
import ArrayBlockingQueue;
import ThreadPoolExecutor;
import TimeUnit;
public class Reject {
public static void main(String[] args){
//创建⼀个核⼼线程为3 ,最⼤线程为5的,空闲时间0 ,单位,队列容量⼤⼩,拒绝策略为直接抛出异常
ThreadPoolExecutor threadPoolExecutor =new ThreadPoolExecutor(3,5,0, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(1),new ThreadPoolExecutor.DiscardPolicy());
for(int i=0;i<15;i++){
@Override
public void run(){
System.out.println(Thread.currentThread().getName()+"");
}
});
}
//关闭线程池
threadPoolExecutor.shutdown();
}
}
线程池线程该怎么分配?依据是什么?
视情况⽽定
Future futureTask Runnable Callable的区别?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论