gpt4 book ai didi

java - Java 6 Mac OS X Lion 上的奇怪并发行为

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:36 26 4
gpt4 key购买 nike

我已经尝试了内部锁和 java.util.concurrent.ReentrantLock 之间的差异一段时间了。我发现了非常奇怪的事情。考虑以下代码:

public class WriteOnceRunAnywhere {

private static long counter = 0;

public static void main(String[] args) throws InterruptedException {

final int numThreads = 2;
final int numIterations = Integer.MAX_VALUE;

Runnable inc = new Runnable() {
public void run() {
for (int i = 0; i < numIterations; i++) {

increment();

if (i % 10000000 == 0)
System.out.println(Thread.currentThread().getName());
}
}
};

for (int i = 0; i < numThreads; i++)
new Thread(inc).start();
}

public static synchronized void increment() {
counter++;
}
}

简单的事情,没有花哨的东西。正确的?偏偏就断了!当你运行它时,它很可能不会结束。在线程之间进行一些乒乓之后,您会看到实际上只有一个线程在运行。另一个永远挂起:

Thread-1 Thread-2 Thread-1 Thread-2 Thread-1 ... Thread-2 Thread-2 Thread-2 Thread-2 Thread-2 Thread-2 Thread-2 Thread-2 Thread-2 ...

此后,java进程无法接受jvisualvm连接。 CPU负载下降并持续保持在1.0%左右。

Mac OS X Lion 10.7.2 (11C74), 2.53 GHz Intel Core i5

java version "1.6.0_29" Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11M3527) Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)

谁能告诉我这里到底发生了什么?

UPD 看起来该错误将在 1.6.30 see 中修复

最佳答案

看来您正在观察 Mac OS 7 JDK 1.6 中的现有错误。您可以看到这里发生了同样的问题:

http://cs.oswego.edu/pipermail/concurrency-interest/2012-January/008778.html

您可能想从头开始阅读

http://cs.oswego.edu/pipermail/concurrency-interest/2012-January/008759.html

Open JDK 7 似乎终于有了解决方案。

http://cs.oswego.edu/pipermail/concurrency-interest/2012-January/008789.html

长话短说。仅当 JDK 1.6_14(或更高版本 < JDK 7)和 Max OS 7 时才会失败。他们的测试和您看到的结果非常相似。

我猜你甚至无法获取 jstack 或加载 jconsole?

关于java - Java 6 Mac OS X Lion 上的奇怪并发行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038169/

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