Update 线程池.md

master
Omooo 4 years ago
parent 1354f49547
commit bd22a4203d
  1. 5
      blogs/Java/口水话/线程池.md

@ -1,4 +1,7 @@
--- ---
线程池口水话 线程池口水话
--- ---
@ -27,6 +30,6 @@
需要注意的是,线程池使用 FutureTask 时如果把拒绝策略设置为 DiscardPolicy 和 DiscardOldestPolicy,并且在被拒绝的任务的 Future 对象上调用了无参 get 方法,那么调用线程会一直被阻塞。所以当使用 Future 时,尽量使用带超时时间的 get 方法,这样即使使用了 DiscardPolicy 拒绝策略也不至于一直等待,超时时间到了就会自动返回。如果非要使用不带参数的 get 方法那就只能重写 DiscardPolicy 的拒绝策略了,发现是 FutureTask 就调用 cancel,并且需要在 get 方法加 try-catch。 需要注意的是,线程池使用 FutureTask 时如果把拒绝策略设置为 DiscardPolicy 和 DiscardOldestPolicy,并且在被拒绝的任务的 Future 对象上调用了无参 get 方法,那么调用线程会一直被阻塞。所以当使用 Future 时,尽量使用带超时时间的 get 方法,这样即使使用了 DiscardPolicy 拒绝策略也不至于一直等待,超时时间到了就会自动返回。如果非要使用不带参数的 get 方法那就只能重写 DiscardPolicy 的拒绝策略了,发现是 FutureTask 就调用 cancel,并且需要在 get 方法加 try-catch。
或者可以参考 Android 的 AsyncTask 的做法,当发生拒绝策略时,复写的拒绝策略其实是再创建一个核心线程可回收的线程池来处理任务。 或者可以参考 Android 的 AsyncTask 的做法,当发生拒绝策略时,复写的拒绝策略其实是再创建一个核心线程可回收的线程池来处理任务。
至此,线程池就讲完了。 至此,线程池就讲完了。
Loading…
Cancel
Save