最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Netty源碼解析NioEventLoop創(chuàng)建的構造方法

 更新時間:2022年03月25日 15:37:22   作者:向南是個萬人迷  
這篇文章主要介紹了Netty源碼解析NioEventLoopGroup之NioEventLoop創(chuàng)建的構造方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前文傳送門:Netty源碼分析 NioEventLoop

NioEventLoopGroup之NioEventLoop的創(chuàng)建

回到上一小節(jié)的MultithreadEventExecutorGroup類的構造方法:

protected MultithreadEventExecutorGroup(int nThreads, Executor executor, 
                                        EventExecutorChooserFactory chooserFactory, Object... args) {
    //代碼省略
    if (executor == null) {
        //創(chuàng)建一個新的線程執(zhí)行器(1)
        executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());
    }
    //構造NioEventLoop(2)
    children = new EventExecutor[nThreads];
    for (int i = 0; i < nThreads; i ++) {
        boolean success = false;
        try {
            children[i] = newChild(executor, args);
            success = true;
        } catch (Exception e) {
            throw new IllegalStateException("failed to create a child event loop", e);
        } finally {
           //代碼省略
        }
    }
    //創(chuàng)建線程選擇器(3)
    chooser = chooserFactory.newChooser(children);
    //代碼省略
}

我們來看第二步構造NioEventLoop

這里通過 children = new EventExecutor[nThreads] 初始化了children屬性, 看下這個屬性的定義:

private final EventExecutor[] children

這里的children是EventExecutor類型的數組, 其實就是NioEventLoop的集合, 因為NioEventLoop也是EventExecutor的子類

所以這里初始化了children數組, 大小為參數nThreads傳入的線程數量, 默認為cpu核數的兩倍

后面就是通過for循環(huán)來創(chuàng)建NioEventLoop線程,

在循環(huán)體里通過 children[i] = newChild(executor, args) 創(chuàng)建NioEventLoop, 我們跟newChild(executor, args)方法

因為是NioEventLoopGroup調用的,所以跟到NioEventLoop的newChild方法中:

protected EventLoop newChild(Executor executor, Object... args) throws Exception {
    return new NioEventLoop(this, executor, (SelectorProvider) args[0], 
        ((SelectStrategyFactory) args[1]).newSelectStrategy(), (RejectedExecutionHandler) args[2]);
}

這里我們看到創(chuàng)建了一個NioEventLoop對象, 其中this是NioEventLoopGroup自身, executor就是上一小節(jié)講到的線程執(zhí)行器

我們繼續(xù)跟到NioEventLoop的構造方法

NioEventLoop(NioEventLoopGroup parent, Executor executor, SelectorProvider selectorProvider, 
             SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler) {
    super(parent, executor, false, DEFAULT_MAX_PENDING_TASKS, rejectedExecutionHandler);
    //代碼省略
    provider = selectorProvider;
    selector = openSelector();
    selectStrategy = strategy;
}

首先看到了調用了父類的構造方法, 然后初始化了幾個屬性:

 selector = openSelector() 這種方式創(chuàng)建個NioEventLoop綁定的selector對象, 有關創(chuàng)建過程, 之后會講到

跟進父類SingleThreadEventLoop類構造方法:

protected SingleThreadEventLoop(EventLoopGroup parent, Executor executor, 
                                boolean addTaskWakesUp, int maxPendingTasks, 
                                RejectedExecutionHandler rejectedExecutionHandler) {
    super(parent, executor, addTaskWakesUp, maxPendingTasks, rejectedExecutionHandler);
    tailTasks = newTaskQueue(maxPendingTasks);
}

再跟到父類SingleThreadEventExecutor構造方法:

protected SingleThreadEventExecutor(EventExecutorGroup parent, Executor executor, 
                                    boolean addTaskWakesUp, int maxPendingTasks, 
                                    RejectedExecutionHandler rejectedHandler) {
    super(parent);
    this.addTaskWakesUp = addTaskWakesUp;
    this.maxPendingTasks = Math.max(16, maxPendingTasks);
    this.executor = ObjectUtil.checkNotNull(executor, "executor");
    taskQueue = newTaskQueue(this.maxPendingTasks);
    rejectedExecutionHandler = ObjectUtil.checkNotNull(rejectedHandler, "rejectedHandler");
}

 this.executor = ObjectUtil.checkNotNull(executor, "executor") 

這里初始化了線程執(zhí)行器

 taskQueue = newTaskQueue(this.maxPendingTasks) 

是創(chuàng)建一個任務隊列, 這個任務隊列可以將不屬于NioEventLoop線程的任務放到這個任務隊列中, 通過NioEventLoop線程執(zhí)行, 具體使用場景之后我們會看到

跟到父類AbstractScheduledEventExecutor的構造方法中:

protected AbstractScheduledEventExecutor(EventExecutorGroup parent) {
    super(parent);
}

最后跟到AbstractEventExecutor類的構造方法

protected AbstractEventExecutor(EventExecutorGroup parent) {
    this.parent = parent;
}

這里初始化了parent, 這個parent就NioEventLoop所屬的線程組NioEventLoopGroup對象

至此, NioEventLoop創(chuàng)建完成

以上就是Netty源碼解析NioEventLoop創(chuàng)建的構造方法的詳細內容,更多關于Netty NioEventLoop構造方法的資料請關注腳本之家其它相關文章!

相關文章

  • 淺談Spring裝配Bean之組件掃描和自動裝配

    淺談Spring裝配Bean之組件掃描和自動裝配

    本篇文章主要介紹了淺談Spring裝配Bean之組件掃描和自動裝配,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java -jar啟動項目以及日志輸出的相關問題

    java -jar啟動項目以及日志輸出的相關問題

    這篇文章主要介紹了java -jar啟動項目以及日志輸出的相關問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java中方法遞歸的簡單示例

    java中方法遞歸的簡單示例

    這篇文章主要給大家介紹了關于java中方法遞歸的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • java多線程編程之向線程傳遞數據的三種方法

    java多線程編程之向線程傳遞數據的三種方法

    在多線程的異步開發(fā)模式下,數據的傳遞和返回和同步開發(fā)模式有很大的區(qū)別。由于線程的運行和結束是不可預料的,因此,在傳遞和返回數據時就無法象函數一樣通過函數參數和return語句來返回數據
    2014-01-01
  • Java 停止線程需要注意的地方

    Java 停止線程需要注意的地方

    這篇文章主要介紹了Java 停止線程需要注意的地方,幫助大家更好的理解和學習Java線程的相關資料,感興趣的朋友可以了解下
    2020-09-09
  • springboot中使用mybatisplus自帶插件實現分頁的示例代碼

    springboot中使用mybatisplus自帶插件實現分頁的示例代碼

    這篇文章主要介紹了springboot中使用mybatisplus自帶插件實現分頁,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • 基于Java的度分秒坐標轉純經緯度坐標的漂亮國基地信息管理的方法

    基于Java的度分秒坐標轉純經緯度坐標的漂亮國基地信息管理的方法

    本文以java語言為例,詳細介紹如何管理漂亮國的基地信息,為下一步全球的空間可視化打下堅實的基礎,首先介紹如何對數據進行去重處理,然后介紹在java當中如何進行度分秒位置的轉換,最后結合實現原型進行詳細的說明,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 解決resultMap映射數據錯誤的問題

    解決resultMap映射數據錯誤的問題

    這篇文章主要介紹了解決resultMap映射數據錯誤的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringMVC和Swagger整合方法

    SpringMVC和Swagger整合方法

    Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。下面通過本文給大家分享SpringMVC和Swagger整合方法,感興趣的朋友一起看看吧
    2017-08-08
  • Mybatis order by 動態(tài)傳參出現的問題及解決方法

    Mybatis order by 動態(tài)傳參出現的問題及解決方法

    今天,我正在愉快地CRUD,突然發(fā)現出現一個Bug,我們來看看是怎么回事吧!接下來通過本文給大家介紹Mybatis order by 動態(tài)傳參出現的一個小bug,需要的朋友可以參考下
    2021-07-07

最新評論

襄汾县| 兴化市| 呼和浩特市| 鄄城县| 姚安县| 乌兰县| 西畴县| 抚顺市| 奉节县| 西平县| 茂名市| 台湾省| 泊头市| 景谷| 青海省| 青龙| 辽宁省| 中西区| 蓬莱市| 霞浦县| 阿巴嘎旗| 九龙县| 余江县| 新巴尔虎右旗| 犍为县| 洪洞县| 钟山县| 敦煌市| 大新县| 锡林郭勒盟| 建昌县| 焦作市| 林甸县| 监利县| 惠东县| 洛浦县| 永新县| 鹤壁市| 个旧市| 栾川县| 陆河县|