Java 高并发编程详解 6.0 观察者设计模式

观察者设计模式

当事件源满足特定条件需要触发事件通知第三方时可以使用这种设计模式。

线程状态下的观察者设计模式

  1. 设计触发事件条件并屏蔽线程的方法,需要就添加对应方法
/**
 * 任务线程的触发条件
 * 显示当前任务的生命状态 是触发事件的条件
 */
public interface Observable {
   
     // 任务生命周期的枚举状态
    enum Cycle{
   
        STARTED,RUNNING,DONE,ERROR
     }
     // 获取当前任务的生命状态
    Cycle getCycle();
    // 定义任务线程启动的方法 主要屏蔽Thread的其他方法
    void start();
    // 定义任务线程打断方法 Thread其他方法类似 需要自己添加
    void interrupt();
}
  1. 设计任务线程逻辑执行单元

/**
 * 和Runnable的接口类似 用来承载任务的逻辑执行单元
 * 但是 有返回值 和Callable类似
 */
@FunctionalInterface
public interface Task<T> {
   
    // 任务执行单元 有返回值
    T call();
}
  1. 设计触发事件接口和默认空实现

/**
 * 被触发的事件
 * 事件源调用该接口方法,执行其实现类的方法
 */
public interface TaskLifecycle<T> {
   
    // 任务启动时执行 线程准备方法
    void onStart(Thread thread);
    // 任务运行时执行 线程执行方法
    void onRunning(Thread thread);
    // 任务完成时执行 线程关闭方法 并有返回值
    void onFinish(Thread thread,T result);
    // 任务执行报错时执行
    void onError(Thread thread,Exception exception);

    // 空实现 为了保持对Thread类的使用习惯
    class EmptyLifecycle<T> implements TaskLifecycle<T>{
   

        @Override
        public void onStart(Thread thread) {
   
            System.out.println(currentThread().getName()+"----------事件1 触发开始事件-------------");
        }

        @Override
        public void onRunning(Thread thread) {
   
            System.out.println(currentThread().getName()+"----------事件2 触发执行中事件-------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值