ThreadPoolExecutor提供了四种预定义的处理程序策略:
在默认的 ThreadPoolExecutor.AbortPolicy 中,处理程序遭到拒绝将抛出运行时 RejectedExecutionException。
在 ThreadPoolExecutor.CallerRunsPolicy 中,线程调用运行该任务的 execute 本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
在 ThreadPoolExecutor.DiscardPolicy 中,不能执行的任务将被删除。
在 ThreadPoolExecutor.DiscardOldestPolicy 中,如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。
而我现在的情况是我设置
[code]
private static int CORE_POOL_SIZE = 2;//默认
private static int MAX_POOL_SIZE = 4;//默认
[/code]那么我想在需要实现这样的功能,当线程池满,而外面又有对象等待处理,如果运行最长的线程超过2分钟,则用ThreadPoolExecutor.DiscardOldestPolicy 策略,如果运行最长的线程<2分钟,则用ThreadPoolExecutor.CallerRunsPolicy策略
请问这种情况下如何处理,或者有什么类似的方法,总之我的目的就是如果线程池中某个线程运行时间过长,而外面又有新的线程等待处理,则remove那个运行时间太长的线程。谢谢
在默认的 ThreadPoolExecutor.AbortPolicy 中,处理程序遭到拒绝将抛出运行时 RejectedExecutionException。
在 ThreadPoolExecutor.CallerRunsPolicy 中,线程调用运行该任务的 execute 本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
在 ThreadPoolExecutor.DiscardPolicy 中,不能执行的任务将被删除。
在 ThreadPoolExecutor.DiscardOldestPolicy 中,如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。
而我现在的情况是我设置
[code]
private static int CORE_POOL_SIZE = 2;//默认
private static int MAX_POOL_SIZE = 4;//默认
[/code]那么我想在需要实现这样的功能,当线程池满,而外面又有对象等待处理,如果运行最长的线程超过2分钟,则用ThreadPoolExecutor.DiscardOldestPolicy 策略,如果运行最长的线程<2分钟,则用ThreadPoolExecutor.CallerRunsPolicy策略
请问这种情况下如何处理,或者有什么类似的方法,总之我的目的就是如果线程池中某个线程运行时间过长,而外面又有新的线程等待处理,则remove那个运行时间太长的线程。谢谢
解决方案 »
- Java字体控制
- java编译成功,咋执行就失败了呢?java执行的语法是如何的?
- java多线程中的可见性问题
- 为什么我用java做的计算器菜单在textfield之下显示(附代码)
- 在JAVA中将下列字符串保存到SQL2000中不成功:
- 急急求,怎样可以让JTextField上怎样实现TextListener()里的textValueChanged(TextEvent e)方法;
- 春节公司要人作业
- 程序编译时没有错,执行时出错,为什么?错误提示如下
- 怎样用方法使页面提交
- Java寒假作业,求助!
- 欢迎高手加入msn java技术群,散分100!!!!!!!!
- 关于线程的问题,大家来帮忙啊!
2:加一个ThreadManager类来控制线程,循环检测Thread,看有没有dead或者blocked。如果有,则destroy里面的job方法。
没看清题目
ThreadPoolExecutor没用过,以前自己做了一个线程池,效果不错,就一直用了
后来才出来了ThreadPoolExecutor这个东西。应该有,你看看有没有设置超时的地方