嘿,我在我的 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;
}
}
}
}
好吧,我可以,但實際上如果值保持初始值?
uj5u.com熱心網友回復:
使用ThreadLocal<Long> endTime完全違背了你的價值的目的。每個執行緒都有它自己的價值。所以你在那個運行回圈中啟動你的“定時器”,endTime.get()它會回傳你的定時器執行緒的值。
如果您從另一個執行緒呼叫它,它將為您呼叫該方法的另一個endTime.set(...)執行緒設定值。不是你的定時器執行緒。
也許你想要一個AtomicLong;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/475209.html
