【发布时间】:2010-01-06 21:31:31
【问题描述】:
我遇到了一个性能问题,其中 880 个线程同时在执行 synchronized() { method() },这导致了一个主要的性能问题。
synchronized() 处等待的线程是否可能存在一些限制?我在哪里可以得到限制?
另一个问题是最好将什么放入synchronized( ? )。因为我有不同的类访问那个变量,所以我不能放synchronized(this)。
【问题讨论】:
-
你能更好地解释你的上下文,以及这样的方法。您可能使用了错误的数据结构。
-
880 线程?!遇到性能问题并不奇怪。你能用更少的线程和使用异步操作来解决你的问题吗?
-
什么是“主要性能问题”? 879 个死锁线程?
-
上下文切换。此外,每个线程都有自己的堆栈,因此线程过多会导致内存不足异常。
-
Mark Byers:即使是生锈的旧 32 位操作系统也应该能够毫无问题地处理 880 个线程。 Steve Kuo:如果每个线程使用几个 4K 页面,你仍然只说 1% 的 GB。
标签: java synchronized concurrency