Java 无法编辑线程秒表超时

Java cant edit thread stopwatch timeout

嘿,我在我的 tcp 通信中为超时创建了这段代码,但是在我 运行 线程之后,我无法更改结束时间?有什么想法吗?

public class Timer extends Thread{
    ThreadLocal<Long> endTime= new ThreadLocal<>() {
        @Override
        public Long initialValue() {
            return System.currentTimeMillis()+1000;
        }
    };

    private Client client;

    public void resetTimer(){
        endTime.set((System.currentTimeMillis())+1000);
    }

    Timer(Client client){
        this.client=client;
        endTime.set(System.currentTimeMillis()+1000);
    }

    public void run() {
        while (true) {
            if (endTime.get()<System.currentTimeMillis()) {
                client.endTimeout();
                return;
            }
        }
    }
}

我可以,但实际上如果值保持初始值?

使用 ThreadLocal<Long> endTime 完全违背了你的价值的目的。每个线程都有它自己的值。所以你在那个 运行 循环中启动你的“定时器”有 endTime.get() 其中 returns 你的定时器线程的值。

如果您从另一个线程调用 endTime.set(...),它将为您从中调用方法的 另一个线程 设置值。不是你的定时器线程。

也许你想要 AtomicLong;