当你的线程被中断击中时,它将进入InterruptedException catch块.然后,您可以检查线程花费了多少时间睡觉,并计算出睡眠时间.最后,不要吞咽异常,恢复中断状态是很好的做法,以便调用堆栈中的代码可以处理它.
public void run(){
//do something
//sleep for 3000ms (approx)
long timeToSleep = 3000;
long start, end, slept;
boolean interrupted;
while(timeToSleep > 0){
start=System.currentTimeMillis();
try{
Thread.sleep(timeToSleep);
break;
}
catch(InterruptedException e){
//work out how much more time to sleep for
end=System.currentTimeMillis();
slept=end-start;
timeToSleep-=slept;
interrupted=true
}
}
if(interrupted){
//restore interruption before exit
Thread.currentThread().interrupt();
}
}