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

观察者模式:
当对象间存在一对多关系时,则使用观察者模式(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(); // 通知观察者
        }
    }
    ......
}

你可能感兴趣的:(通过观察者模式来保护线程稳定)