NioEventloop如何啟動
- 1.首先服務(wù)器端或者客戶端第一次啟動時候都會判斷當(dāng)前執(zhí)行線程是否與loop線程一樣,一樣說明loop以及啟動
不一樣說明有可能未啟動則包裝成任務(wù)放入到loop隊列 - 2.將任務(wù)放入隊列,然后判斷是否inEventLoop,不是的話嘗試啟動線程
- 3.啟動線程時候先判斷是否已經(jīng)啟動過,如果未啟動則啟動,然后在判斷l(xiāng)oop的狀態(tài)是否是關(guān)閉狀態(tài)
如果是則移除任務(wù),拋出reject異常 - 4.啟動線程的流程是將創(chuàng)建線程的任務(wù)包裝成一個任務(wù),然后new一個線程去執(zhí)行這個任務(wù),然后任務(wù)邏輯就是將這個
執(zhí)行線程賦值給當(dāng)前的loop,然后執(zhí)行該loop的run方法 - 5.然后檢測當(dāng)前線程如果是外部線程,且loop線程被selector弄成了阻塞,則去喚醒selector,類似于咱們的線程中斷