java⾃定义线程池及参数怎么设置?
java线程池创建的四种我们如何⾃定义⼀个线程池?线程池的参数怎么设置?
废话不多说直接上代码
int cpuNum = Runtime().availableProcessors();
//线程⼤⼩:这⼀点要看我们执⾏的任务是cpu密集型,还是io密集型
//如果有关于计算机计算,⽐较消耗资源的是cpu密集型,线程⼤⼩应该设置为cpu核数+1
//如果有关⽹络传输,连接数据库等,是io密集型,线程⼤⼩应该设置为cpu*2
ThreadPoolExecutor threadPoolExecutor =new ThreadPoolExecutor(10,
2* cpuNum,
3, TimeUnit.SECONDS,
new LinkedBlockingDeque<Runnable>(10),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
try{
for(int i =0; i <9; i++){
}
}catch(Exception e){
e.printStackTrace();
}finally{
threadPoolExecutor.shutdown();
}
这串代码是创建了⼀个任务并且提交给了线程池
这是我的任务类
public class ThreadDemo implements Runnable {
private int i;
public ThreadDemo(int i){
this.i = i;
}
@Override
public void run(){
System.out.println(Thread.currentThread().getName()+i);
}
}
继承runnable实现run⽅法
需要注意的是在任务类⾥⾯,使⽤注解注⼊bean是不⽣效的,所以需要通过构造函数来注⼊
当我们创建⼀个线程池,开始的时候线程池⾥⾯⼀个线程也没有,随着任务的提交,⽽创建线程,当当前的线程数⼩于最⼤线程数的时候,继续创建线程,如果⼤于最⼤线程数,就放进阻塞队列⾥⾯,如果队列满了则触发拒绝策略;
线程池参数有哪些,分别是⼲什么的
corePoolSize:线程⼤⼩,这个参数根据我们的任务数去设置的
maximumPoolSize:最⼤线程数,这个⼀般我们根据机器的cpu核数和我们任务是io密集型或cpu密集型去设置的
java获取cpu核数的⽅法是Runtime().availableProcessors();
cpu密集型就是任务⾥是cpu计算⽐较消耗cpu资源的这种的我们最⼤线程数⼀般设置为cpu核数+1
io密集型就是任务⾥是⽹络传输,连接数据库等⼀些ios操作的,我们⼀般设置最⼤线程数是2*cpu核数
keepAliveTime:第三个参数是当线程没有任务的时候最⼤的保留时间超出这个时间,这个线程就被终⽌了
unit:第四个参数是keepAliveTime的时间单位
workQueue:第五个参数是存储执⾏任务的队列,当到达最⼤线程数,就会把任务放在队列⾥⾯
threadFactory:第六个参数是线程⼯程
handler:最后⼀个参数拒绝策略,当队列也满了的时候就会出发拒绝策略
感谢阅读,不当之处,还望海涵
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论