Posted on 2012-06-16 22:32
steven.cui 閱讀(1158)
評論(0) 編輯 收藏 所屬分類:
java
java的多線程Thread類提供了setName方法或者通過構(gòu)造器傳入name,來指定線程的名稱。
近些時間在開源方面看到Netty,觀察到Netty的重命名線程的策略類:
ThreadNameDeterminer。這個接口有兩個策略,一個是使用PROPOSED(建議名稱),還有個是CURRENT(當前名稱)
當前名稱的策略是未實現(xiàn)的,可能為以后擴展考慮吧。
另外就是ThreadRenamingRunnable這個類,這個類里面構(gòu)建函數(shù)傳入Runnable接口,和proposed建議名稱。
由于本身ThreadRenamingRunnable也是實現(xiàn)Runnable類的,所以你在自己業(yè)務邏輯種還是照樣實現(xiàn)Runnable接口來寫邏輯,完全對業(yè)務代碼沒有侵入。
代碼中大概是這樣的情況:
public run() {
//根據(jù)規(guī)則把線程名字進行修改
try {
runnable.run(); // 調(diào)用傳入接口的run方法
} finally {
if (renamed)
// 恢復之前的名字
}
}
只需要在構(gòu)建的你的Runnable的時候,重新包裝一下即可:
new ThreadRenamingRunnable(new OioWorker(acceptedChannel),
"Old I/O server worker (parentId: " + channel.getId() + ", " + channel + ')'));
這樣的Decorator模式,重新將Runnable接口進行了“裝飾”,使其具備了線程名稱的功能。
Runnable接口還是原來的接口,對run方法的再次封裝使其具備了另外一項功能,這就是Decorator模式的精華所在。