posts - 11, comments - 9, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          線程重命名(Netty)和設計模式Decorator

          Posted on 2012-06-16 22:32 steven.cui 閱讀(1159) 評論(0)  編輯  收藏 所屬分類: java

          java的多線程Thread類提供了setName方法或者通過構造器傳入name,來指定線程的名稱。

          近些時間在開源方面看到Netty,觀察到Netty的重命名線程的策略類:

          ThreadNameDeterminer。這個接口有兩個策略,一個是使用PROPOSED(建議名稱),還有個是CURRENT(當前名稱)

          當前名稱的策略是未實現的,可能為以后擴展考慮吧。

          另外就是ThreadRenamingRunnable這個類,這個類里面構建函數傳入Runnable接口,和proposed建議名稱。

          由于本身ThreadRenamingRunnable也是實現Runnable類的,所以你在自己業務邏輯種還是照樣實現Runnable接口來寫邏輯,完全對業務代碼沒有侵入。

          代碼中大概是這樣的情況:

          public run() {
               //根據規則把線程名字進行修改
               try {
                    runnable.run(); // 調用傳入接口的run方法
               } finally {
                    if (renamed)
                         // 恢復之前的名字
               }
          }


          只需要在構建的你的Runnable的時候,重新包裝一下即可:

          new ThreadRenamingRunnable(new OioWorker(acceptedChannel),

                                         "Old I/O server worker (parentId: " + channel.getId() + ", " + channel + ')'));


          這樣的Decorator模式,重新將Runnable接口進行了“裝飾”,使其具備了線程名稱的功能。

          Runnable接口還是原來的接口,對run方法的再次封裝使其具備了另外一項功能,這就是Decorator模式的精華所在。

          主站蜘蛛池模板: 辽源市| 高州市| 元氏县| 昌黎县| 淮安市| 甘肃省| 博爱县| 锦屏县| 庆安县| 赤壁市| 崇左市| 托克逊县| 满洲里市| 石家庄市| 霍山县| 永新县| 淮南市| 平潭县| 栾城县| 绥德县| 济宁市| 嘉善县| 特克斯县| 涞源县| 清远市| 孙吴县| 石林| 璧山县| 崇明县| 广汉市| 宜兰市| 周口市| 纳雍县| 额尔古纳市| 岗巴县| 灵台县| 夏津县| 贡觉县| 久治县| 白银市| 芦山县|