线程可以自行中断吗?

时间:2020-04-26 18:19:40

标签: java multithreading

我想问一个线程是否有可能结束本身。我在线程实例中有一个方法检查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()不起作用?以及如何在其自身实例中中断线程?

1 个答案:

答案 0 :(得分:1)

呼叫中断只会设置一个标志,它没有任何其他作用。

线程可以对其自身调用中断。当线程捕获到InterruptedException并想还原引发异常时清除的标志时,可能会发生这种情况。

这通常看起来像:

try {
    Thread.sleep(1000L);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt():
}

但是这种特殊情况是唯一有意义的时间。

使用currentThread方法可确保无论代码如何执行,中断调用都会对当前正在执行的线程起作用。

相关问题