gpt4 book ai didi

java - Thread.isInterrupted 不起作用,Thread.interrupted 起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:01 26 4
gpt4 key购买 nike

下面的程序演示了这个问题(最新的 JVM 等等):

public static void main(String[] args) throws InterruptedException {
// if this is true, both interrupted and isInterrupted work
final boolean withPrint = false;

// decide whether to use isInterrupted or interrupted.
// if this is true, the program never terminates.
final boolean useIsInterrupted = true;

ExecutorService executor = Executors.newSingleThreadExecutor();
final CountDownLatch latch = new CountDownLatch(1);
Callable<Void> callable = new Callable<Void>() {
@Override
public Void call() throws Exception {
Random random = new Random();
while (true) {
if (withPrint) {
System.out.println(random.nextInt());
System.out.flush();
}
if (useIsInterrupted)
{
if (Thread.currentThread().isInterrupted())
break;
}
else
{
if (Thread.interrupted())
break;
}
}
System.out.println("Nice shutdown");
latch.countDown();
return null;
}
};
System.out.println("Task submitted");
Future<Void> task = executor.submit(callable);
Thread.sleep(100);
task.cancel(true);
latch.await();
System.out.println("Main exited");
executor.shutdown();
}

最佳答案

这看起来像一个 known issue多处理器机器,主要是 64 位操作系统和 1.5 - 7.0 的 java 版本

问题描述:在同时运行两个线程时,第一个线程使用 Thread.interrupt() 中断第二个线程。第二个线程测试它是否被中断调用 Thread.isInterrupted() 方法,该方法总是返回 false。

这发生在运行 64 位操作系统(Vista 和 Linux)的多处理器 PC 上。在 Vista 64 位上,使用 64 位 JVM(从 1.5 到 1.7 的所有版本)时会发生这种情况,但在使用 32 位 JVM 时不会发生。在 Linux 64 位上,使用 64 位 JVM(从 1.5 到 1.7 的所有版本)或使用 32 位 JVM(从 1.5 到 1.7 的所有版本)时会发生这种情况。

解决方案是安装修复后的版本,即 1.6.0_16-b02 或更高版本。

关于java - Thread.isInterrupted 不起作用,Thread.interrupted 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com