美文网首页
通过观察者模式来保护线程稳定

通过观察者模式来保护线程稳定

作者: 笨手笨脚越 | 来源:发表于2019-11-26 16:15 被阅读0次

    观察者模式:
    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

    Java 实现观察者(Observer)模式 参考

    1. https://blog.csdn.net/jjwwmlp456/article/details/39967021
    2. https://www.runoob.com/design-pattern/observer-pattern.html

    初始化:

    public void init() {
        checkWorkList();
        ListenerRunnable listenerRunnable = new ListenerRunnable();
        ListenerThreadObserver observer = new ListenerThreadObserver(); //初始化监听线程的观察者实例
        listenerRunnable.addObserver(observer); // 作为参数传给监听线程
        Thread listenerThread = new Thread(listenerRunnable);
        listenerThread.setDaemon(true);
        listenerThread.start();
    }
    

    观察者:

    class ListenerThreadObserver implements Observer {
    
        @Override
        public void update(Observable o, Object arg) {
            try {
                Thread.sleep(properties.getSleepTime());
            } catch (InterruptedException e) {
                logger.warn(e.getMessage());
            }
            init(); // 接收到数据变化的通知,则重新初始化,创建线程
            logger.info("The encoder listener server has bean restarted!");
        }
    }
    

    监听线程:

    class ListenerRunnable extends Observable implements Runnable {
    
        @Override
        public void run() {
            try {
                while (true) {
                    ......
                    Thread.sleep(properties.getSleepTime());
                }
            } catch (Exception e) {
                logger.warn(e.getMessage());
                setChanged(); // 捕获到异常,线程结束。标记 改变, 只有标记后才能通知到观察者
                notifyObservers(); // 通知观察者
            }
        }
        ......
    }
    

    相关文章

      网友评论

          本文标题:通过观察者模式来保护线程稳定

          本文链接:https://www.haomeiwen.com/subject/vpqywctx.html