烟台建站服务,荥阳市建设局 网站,金融投资网站模板,建设网站的收费线程池在实际中的使用 实际开发中#xff0c;最常用主要还是利用ThreadPoolExecutor自定义线程池#xff0c;可以给出一些关键的参数来自定义。 在下面的代码中可以看到#xff0c;该线程池的最大并行线程数是5#xff0c;线程等候区#xff08;阻塞队列)是3#xff0c;即…线程池在实际中的使用 实际开发中最常用主要还是利用ThreadPoolExecutor自定义线程池可以给出一些关键的参数来自定义。 在下面的代码中可以看到该线程池的最大并行线程数是5线程等候区阻塞队列)是3即该线程池最多接受8个线程任务的同时提交。 一旦超过了8这个任务数就会抛出java.util.concurrent.RejectedExecutionException拒绝执行异常 任务数8运行结果 任务数9运行结果 源代码
import java.util.concurrent.*;
/*** author zkw* Description 自定义线程池*/
public class CustomerThreadPool {public static void main(String[] args) {ExecutorService threadPool new ThreadPoolExecutor(3, //初始线程池并行数5, //线程池最大并行数2L, //空闲的线程允许空闲的时间TimeUnit.SECONDS, //上面参数的单位new LinkedBlockingQueueRunnable(3), //设置等候队列长度不设置的话会默认使用Integer的最大值Executors.defaultThreadFactory(), //创建线程的工厂new ThreadPoolExecutor.AbortPolicy()); //拒绝策略
try {for (int i 0; i 8; i) {threadPool.execute(()-{System.out.println(Thread.currentThread().getName()\t正在服务);});}
}catch (Exception e){e.printStackTrace();}finally {threadPool.shutdown();}}
}
线程池拒绝策略
AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统正常运行
CallerRunsPolicy:“调用者运行”一种调节机制该策略既不会抛弃任务也不会抛出异常而是将某些任务回退到调用者
而降低新任务的流量。比如是main线程提交的任务就回退给main线程执行
DiscardOldestPolicy:抛弃队列中等待最久的任务然后把当前任务加人队列中尝试再次提交当前任务。
DiscardPolicy该策略默默地丢弃无法处理的任务不予任何处理也不抛出异常。如果允许任务丢失这是最好的一种策略。 线程池参数设置细节
如果任务都是cpu密集型设置线程池大小的时候应该使用的是根据不同电脑的cpu核数来设置的动态的参数
获取cpu核数
Runtime.getRuntime().availableProcessors() ExecutorService threadPool new ThreadPoolExecutor(3,Runtime.getRuntime().availableProcessors(), //根据不同cpu设置的动态线程池大小2L, TimeUnit.SECONDS, new LinkedBlockingQueueRunnable(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
编程篇函数式接口 这块知识主要是在看源代码的时候有用jdk提供了四大常用的函数式接口