Java 从另一个线程更新对象成员变量

Java 从另一个线程更新对象成员变量,java,multithreading,thread-safety,scheduled-tasks,Java,Multithreading,Thread Safety,Scheduled Tasks,我需要在成员变量到期之前刷新它。我选择从另一个线程执行,该线程是从定期ScheduledExecutorService任务生成的。我的目标是在连接对象到期之前刷新连接对象,这是在固定时间之后发生的,比如说服务器将关闭连接对象大约2小时,并且可能会有一些潜在的数据丢失。 我的代码如下所示 class Main { static ScheduledExecutorService clientReconnectPool = Executors.newScheduledThreadPool(1

我需要在成员变量到期之前刷新它。我选择从另一个线程执行,该线程是从定期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;
        }
    }
}

我想知道从另一个线程(如上面所述)覆盖成员变量是否是一种好的做法,以及是否有更干净的替代方法。

如果要用新对象替换旧的
客户机
对象,为什么要对旧对象进行清理?你的问题不清楚。此外,在堆栈溢出时,跨线程更新对象的主题已经被多次处理。编辑您的问题,以指示现有问题和答案如何解决您的问题。我在这里进行清理,因为它连接了一个网络回调,即使我替换了引用,对象也可能不会被GC’ed。因此,我将“关闭()”旧对象。我找不到任何直接替换引用的问题。如果您能将我链接到一个,我将不胜感激。问题的一部分是,是否有更好的方法可以做到这一点。如果您要用新对象替换旧的
客户端
对象,为什么要对旧对象进行清理?你的问题不清楚。此外,在堆栈溢出时,跨线程更新对象的主题已经被多次处理。编辑您的问题,以指示现有问题和答案如何解决您的问题。我在这里进行清理,因为它连接了一个网络回调,即使我替换了引用,对象也可能不会被GC’ed。因此,我将“关闭()”旧对象。我找不到任何直接替换引用的问题。如果你能给我一个链接,我将不胜感激。问题的一部分是,是否有更好的方法来实现这一点。