0

我在枚举中有一个方法,该方法由同时运行的许多线程调用。

因为 JVM 只允许在内存中分配一个枚举实例,所以我猜编译器或 JVM 本身在某处进行了一些优化,以避免线程等待 CPU 访问相同的位置该方法的内存,一遍又一遍地为每个线程执行该方法,造成瓶颈。

当我将线程数从 5 更改为 300(我通过 ScheduledExecutorService 执行它们)时,我发现系统的整体吞吐量没有差异。

是否真的进行了优化或事情与我想象的不同?

4

3 回答 3

2

如果所有方法都在访问(即读取)内存,则没有冲突。如果您不更改值,并且您没有在实例或静态变量中保存值,那么您的方法是“线程安全的”,无需同步。

要么你没有完全说明你的问题,要么没有。

于 2012-08-20T01:07:26.683 回答
1

您可能没有看到吞吐量有任何改善的原因是因为并行执行任务所节省的任何费用都可能被创建所有这些线程的费用所抵消,而无需任何代码或不知道您的程序在做什么,这很难说。请记住,即使使用线程池之类的技术,线程的创建和销毁也不是免费的,因此不能保证仅创建大量线程就可以提高吞吐量。

于 2012-08-20T01:19:00.017 回答
0

除非内存访问是只读的,即没有线程更新变量的值,否则吞吐量保持不变。如果您仍然相信并发问题,请尝试 JNI。

于 2012-08-20T02:02:49.060 回答