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

          線程重命名(Netty)和設(shè)計(jì)模式Decorator

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

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

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

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

          當(dāng)前名稱的策略是未實(shí)現(xiàn)的,可能為以后擴(kuò)展考慮吧。

          另外就是ThreadRenamingRunnable這個(gè)類,這個(gè)類里面構(gòu)建函數(shù)傳入Runnable接口,和proposed建議名稱。

          由于本身ThreadRenamingRunnable也是實(shí)現(xiàn)Runnable類的,所以你在自己業(yè)務(wù)邏輯種還是照樣實(shí)現(xiàn)Runnable接口來寫邏輯,完全對業(yè)務(wù)代碼沒有侵入。

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

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


          只需要在構(gòu)建的你的Runnable的時(shí)候,重新包裝一下即可:

          new ThreadRenamingRunnable(new OioWorker(acceptedChannel),

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


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

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

          主站蜘蛛池模板: 金堂县| 庆安县| 绥芬河市| 揭东县| 阳原县| 靖西县| 虎林市| 紫云| 泰兴市| 安陆市| 柞水县| 车致| 香河县| 呼伦贝尔市| 甘南县| 静海县| 敖汉旗| 永胜县| 横峰县| 上犹县| 敦化市| 吴桥县| 黄大仙区| 商南县| 从江县| 铅山县| 贺兰县| 上林县| 河曲县| 田东县| 航空| 新干县| 柳江县| 两当县| 桦川县| 安吉县| 玉山县| 古丈县| 天峻县| 门源| 永和县|