关于如何创建守护线程来监控地图的最佳实践

Best practice on how to create a daemon thread to monitor a map

我有一个 class 静态地图,它会随机更新。

class MyMap{
private static Map my_map= new Map();
//setters
//getters
}

我想创建 MapObserver class,它生成一次守护线程。此线程调用读取地图的方法。

class MapObserver{
private static boolean initialised = false;
private static final ScheduledExecutorService exec = 
        Executors.newScheduledThreadPool(1, new ThreadFactory() {

        public Thread newThread(Runnable r) {
            Thread t = Executors.defaultThreadFactory().newThread(r);
            t.setDaemon(true);
            return t;
        }
    });
public static void startObserverThread() {
        if (!initialised) {
            exec.scheduleAtFixedRate(new Runnable() {
                @Override
                public void run() {

                    //read method
                }

            }, 0, 5, TimeUnit.SECONDS);
            initialised=true;
        }
    }
}

如何以及在何处初始化这个 class 以便它只初始化一次并且不会产生额外的线程。 这是监控我的地图的好方法吗?

如果您有一个静态地图,您可以简单地放置一个静态 (singleton) 线程或您的 MapObserver

尽管您的问题会被否决,因为您所描述的是一种非常糟糕的监视对象状态的方法。请阅读并学习 design patterns

正确的方法可能是创建一个外观(一个 Map 子类覆盖 put 方法来通知需要通知的内容),如果有人有更好的想法,请随时发表评论。

如果您的用例会限制您使用此选项或强制您使用单独的线程(不考虑锁定等),则需要在您的问题中指定它