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;
嘿,我在我的 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;