我想问一个线程是否有可能结束本身。我在线程实例中有一个方法检查int溢出,但不是run()方法。如果internalSteps达到Integer.MAX_VALUE / numberOfAllThreads,我想停止线程
private void addInternalStep() {
++internalSteps;
if( internalSteps == (Integer.MAX_VALUE / numberOfAllThreads) ) {
System.out.println("Thread stopped. In danger of overflow.");
this.interrupt(); // Not stopping the thread
}
}
@Override
public void run() {
while( !isInterrupted() ) {
if(Math.pow(Math.random(), 2) + Math.pow(Math.random(), 2) < 1) {
hits = hits.add(BigDecimal.ONE);
}
counter = counter.add(BigDecimal.ONE);
addInternalStep();
}
}
为什么this.interrupt()不起作用?以及如何在其自身实例中中断线程?
答案 0 :(得分:1)
呼叫中断只会设置一个标志,它没有任何其他作用。
线程可以对其自身调用中断。当线程捕获到InterruptedException并想还原引发异常时清除的标志时,可能会发生这种情况。
这通常看起来像:
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
Thread.currentThread().interrupt():
}
但是这种特殊情况是唯一有意义的时间。
使用currentThread方法可确保无论代码如何执行,中断调用都会对当前正在执行的线程起作用。