线程和枚举优化

时间:2012-08-20 01:03:04

标签: java jvm enumeration

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

要么你没有完全陈述你的问题,要么没有问题。

答案 1 :(得分:1)

您可能没有看到吞吐量有任何改善的原因是因为并行执行任务所产生的任何节省可能会被创建所有这些线程的费用所消除,而没有任何代码或任何想法您的程序正在做什么这么难说。请记住,即使使用线程池等技术,线程创建和销毁也不是免费的,因此不能保证创建大量线程可以提高吞吐量。

答案 2 :(得分:0)

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