首页 > 解决方案 > 从另一个线程更新对象成员变量

问题描述

我需要在成员变量到期之前刷新它。我选择从另一个由定期 ScheduledExecutorService 任务产生的线程执行此操作。我的目标是在连接对象到期之前在此处刷新连接对象,这发生在固定时间之后,例如大约 2 小时服务器将关闭它并且可能存在一些潜在的数据丢失。我的代码如下所示

class Main {

    static ScheduledExecutorService clientReconnectPool = Executors.newScheduledThreadPool(10);

    Client client;

    Main() {
        clientReconnectPool.scheduleAtFixedRate(() -> {
            reconnectClient();
        }, 1, 1, TimeUnit.HOURS);
    }

    void reconnectClient() {

        Client newClient = initClient();
        if (newClient != null) {
            cleanupOldClient();
            client = newClient;
        }
    }
}

我想知道像上面那样从另一个线程覆盖成员变量是否是一种好习惯,以及是否有任何更简洁的替代方法。

标签: javamultithreadingthread-safetyscheduled-tasks

解决方案


推荐阅读