DelayedWorkQueue踩坑筆記
在看這個原始碼的時候,踩了一個大坑,因為看網上的部落格說:在這個類中,有一個DelayQueue的物件,但是我翻了幾遍原始碼(我看的是jdk8的原始碼),也沒看到這個內部類中有一個DelayQueue物件,直到我看了下這個類的繼承關係和DelayQueue的基本一樣之後,我覺得,有可能在jdk8中,這個內部類的原始碼改了,這個類自己去實現了DelayQueue的功能
所以我就去找了下jdk的原始碼,發現jdk7的ScheduleThreadPoolExecutor的內部類DelayedWorkQueue也沒有DelayQueue物件
我就再往前找,在jdk6的原始碼中,找到了
這裡可以看到,在jdk6原始碼中,確實是內建了一個DelayQueue物件,所有的方法都是呼叫的delayQueue的方法
但是在jdk7和jdk8中,DelayedWorkQueue實現了DelayQueue的功能,自己實現了入隊、出隊、重新入隊的功能
DelayQueue和DelayedWorkQueue的一個區別是:
前者入隊的必須是實現了Delayed介面的物件,後者不需要;也就是說DelayQueue中所儲存的物件必須是實現了Delayed介面的物件
public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
implements BlockingQueue<E>
static class DelayedWorkQueue extends AbstractQueue<Runnable>
implements BlockingQueue<Runnable>```
ScheduleThreadPoolExecutor和ThreadPoolExecutor的區別
1.scheduleThreadPoolExecutor對task進行了一層包裝,包裝成scheduleFutureTask
2.ScheduleThreadPoolExecutor不能設定最大執行緒數,只能使用指定的Integer.MAX_VALUE
3.ScheduleThreadPoolExecutor不能設定allowCoreThreadTimeOut屬性
相關文章
- Realm ios踩坑筆記iOS筆記
- MUI的踩坑筆記UI筆記
- Go踩坑筆記(十九)Go筆記
- 筆記:Mysql踩坑之路筆記MySql
- vue + typescript 踩坑筆記(一)VueTypeScript筆記
- next.js 踩坑筆記JS筆記
- vue + typescript 踩坑筆記(二)VueTypeScript筆記
- Vue踩坑筆記(更新ing)Vue筆記
- Node系列-爬蟲踩坑筆記爬蟲筆記
- 筆記:Node.js Postgresql踩坑筆記Node.jsSQL
- 【踩坑筆記】專案出現Permission denied筆記
- 用Java執行Python:Jython踩坑筆記JavaPython筆記
- removeChild踩坑記REM
- vue 踩坑記Vue
- mpVue 踩坑記Vue
- vuepress踩坑記Vue
- mpvue開發微信小程式踩坑筆記Vue微信小程式筆記
- 前端專案框架搭建隨筆---Webpack踩坑記前端框架Web
- Sentry 部署踩坑記
- RN 踩坑:雜記
- sealos踩坑記錄
- strtotime 踩坑記錄
- Dubbo 2.7.1 踩坑記
- DietPi踩坑記錄
- laravel踩坑記錄Laravel
- PHP 8 踩坑記PHP
- 踩坑日記(1)
- node link 踩坑記錄
- ABP框架踩坑記錄框架
- Electron工程踩坑記錄
- gorm踩坑記錄(一)GoORM
- Kubernetes探針踩坑記
- Nginx的踩坑日記Nginx
- MySQL_踩坑記錄MySql
- Electron踩坑日記-2
- Android Studio踩坑記錄Android
- Opengl ES之踩坑記
- Go json 踩坑記錄GoJSON