Java并发库的设计模式---Command模式

public interface Executor{
      void execute(Runnable cmd);
}

     如此简单的接口,却为一个灵活而强大的框架创造了基础。使得线程的执行逻辑和时序逻辑得到了分离,提高了健壮性和可扩张性,使得需求变化时不再是将整个程序重写而只需修改相应的执行逻辑

 

     Executor解藕了任务的执行策略和任务的执行过程:  只要提交给Executor一个Runnable,Exector根据自身的执行策略(如使用线程池,定时执行,或单线程等等),去调用runnable的run方法。Executor只是指定执行的策略,只知道Runnable有个run方法,不需要知道run what;而 Runnable只需要知道自己到底做什么,不需要知道到底按什么顺序做,什么时刻做。

      这里面有两个变化点:“做什么” 和 ”怎么做“的变化当系统有多个变化点时,我们一般的做法是对每个变化点分别进行封装 。这样使得每个对象(类)只需要管理一种变化。一个变化了,不会影响到其他的变化点,保证了可扩展性。

       Executor实际上就是一个Command模式。命令模式使用很常见,GUI的Swing中菜单命令,JDBC的Query命令对象等等(这里不说Command模式了,想写的时候在写吧)。

 

        类库中提供了几个Executor的实现(主要用于线程池),通过调用Executors的某个静态方法来创建:

       newFixedThreadPool 创建一个顶长的线程池。

       newCacheThreadPoo; 创建一个可缓存的线程池。如果当前线程池的长度超过了处理的需要,就回收空闲线程;当需求增加是,灵活增加新的线程。

       newSingleThreadExecutor 创建一个单线程的executor

       newScheduleThreadPool 创建一个定长的线程池,支持定时的以及周期性的执行(替代Timer)

 

 

Executor Vs Thread
当看到如下的代码:
new Thread(runnable).start()
并且可能最终希望获得一个更加灵活的执行策略是,考虑使用Executor代替Thread

 

   ExecutorService继承了Executor,提供了对生命周期管理。

 

public interface ExecutorService exetends Executor {
     void shutdown(();
     List<Runnable> shutdownNow();
     boolean isShutdown();
     boolean istermindated();
    boolean awaitTermination(long timeout, TimeUnit unit)
        throw InterruptedException;
    //....其他用于任务提交的便利方法
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值