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那个运行时间太长的线程。谢谢

解决方案 »

  1.   

    1:申请线程的job接口要加一个destroy方法。也就是说线程运作的时候能够通过这个接口把正在运行的方法强行停掉。
    2:加一个ThreadManager类来控制线程,循环检测Thread,看有没有dead或者blocked。如果有,则destroy里面的job方法。
      

  2.   

    谢谢楼上的,又更优的方法么?我想ThreadPoolExecutor应该考虑到这一点了,只不过我不知道罢了
      

  3.   

    sorry
    没看清题目
    ThreadPoolExecutor没用过,以前自己做了一个线程池,效果不错,就一直用了
    后来才出来了ThreadPoolExecutor这个东西。应该有,你看看有没有设置超时的地方