java 线程池
2021-03-28 18:27
标签:schedule 核心 空闲 ack 任务队列 博文 inter work imu java线程池 什么是线程池? 使用线程池的优点 线程池有哪些类型 1.newCachedThreadPool 一种可以缓存的线程池,若是线程池长度超过了处理需要,将会灵活回收空闲线程,若是没有课回收的线程,则会创建新的线程。该线程池容量为无限大,当执行第二个任务时,如果需要第一个已完成任务中执行过的线程,那么线程池可以重复调用,不需要重新创建新的线程。 实例代码如下: 2 newFixedThreadPool 一种固定大小的线程池,可以控制线程最大并发数,超出的线程会在队列中等待,定长线程池的大小可以根据系统资源进行设置。 因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字 3 newScheduledThreadPool 一种定长的线程池,支持定时或者周期性地执行线程。 延迟3秒执行的示例代码: 表示定长为5,延迟3秒执行的线程池 延迟1秒后每3秒执行一次,周期性执行的示例代码: 4 newSingleThreadExecutor 一种单线程化的线程池,它会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。示例代码如下: 结果按照顺序输出 线程池中的参数 参考博文:https://www.jianshu.com/p/174958a72ce9 java 线程池 标签:schedule 核心 空闲 ack 任务队列 博文 inter work imu 原文地址:https://www.cnblogs.com/TidalCoast1034/p/13622711.html
线程池就是一个容器,把创建的若干个线程放入这个容器中,当处理任务需要运行线程时,线程池会将线程提交到任务队列中,处理完之后线程并不会被销毁,而是仍然处于线程中,等待下一任务,如果之后还有任务要使用这个线程,该线程会再次被提交到任务队列中。
2.线程池中的线程不会被销毁,有任务需要时,直接可以提交到任务队列ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i
示例代码:ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
@Override
public void run() {
System.out.println("delay 3 seconds");
}
}, 3, TimeUnit.SECONDS);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("delay 1 seconds, and excute every 3 seconds");
}
}, 1, 3, TimeUnit.SECONDS);
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i
6.threadFactory:线程工厂,主要用来创建线程
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由点用线程处理该任务。
https://www.cnblogs.com/ConstXiong/p/11686245.html
上一篇:Java对象克隆