【问题标题】:synchronized(Object) { } problems同步(对象){}问题
【发布时间】: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


【解决方案1】:

同步无法限制任何内容,对于高级并发构造,您需要查看http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

关于您在 synchronized(?) 中放入的内容,这意味着您锁定的内容取决于您想要实现的锁定行为。如果您有一个全局(例如 public static Object LOCK = new Object();),它可以从所有不同的类访问,并且您在其上进行同步,那么所有类都将锁定在该类上。

看看java tutorial on synchronization

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多