运用Executors.newScheduledThreadPool的当当任务调度度怎么解决

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
//线程对象,多久后执行每隔多长时间执行一次,时间单位
}

循环在阻塞队列中获取任务获取失败返回null

// 1、stop状态之上,线程池已停止不允许获取任务 //2、shutdown状态,但是任务队列为空不允许在获取任务 //一般核心线程不设置超时限制,設置了超时限制否则不会超时回收timed = true || false

触发条件:(1)核心线程池满,阻塞队列满非核心线程池满(2)ThreadPoolExecutor关闭

  • CallerRunsPolicy:以自身线程来执行任务,这樣可以减缓新任务提交的速度
//此时其他线程可以竞争 // 如果线程池已关闭且该任务是非周期任务, 则将其从队列移除

ensurePrestart添加工作线程的方式与ThreadPoolExecutor鈈同:核心线程池未满,则添加到核心线程池核心线程池满,不会去创建工作线程

addWorker(null, false);//核心线程池为0必须保证任务运行,添加一个线程到非核心线程池
  • 对于核心线程池中的工作线程来说如果没有超时设置(allowCoreThreadTimeOut == false),则会使用阻塞方法take获取任务(因为没有超时限制所以会一直等待直到队列中有任务);如果设置了超时,则会使用poll方法(方法入参需要超时时间)超时还没拿到任务的话,该工作线程就会被回收
  • 对于非工作线程来说,都是调用poll获取队列元素超时取不到任务就会被回收。

(一)构建固定线程数的线程池

(二)构建单个线程的线程池

(三)构建可缓存的线程池

只要没有线程可用就可以添加线程注意两点

(三)构建可延时/周期的线程池

1、线程池工厂(创建各种类型的线程池)

* 无界隊列,内部使用同步阻塞队列 * 产生固定线程数的线程管理器 * 构建带有延迟周期功能的线程管理器 // 线程组是为了更加安全

2、线程池(提供叻Callable任务提交和Runnable任务提交)

分别测试两种类型:Runnable没有返回值,Callable具有返回值

//休眠10秒之内的时间 //由于是静态main方法调用因此需要将该类设置为static //休眠10秒之内的时间
}

我要回帖

更多关于 当当任务调度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信