posts - 11, comments - 9, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

线程重命名(Netty)和设计模式Decorator

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模式的精华所在。


只有注册用户登录后才能发表评论。


网站导航: