Posted on 2012-06-16 22:32
steven.cui 阅读(1142)
评论(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模式的精华所在。