【问题标题】:Multiple Synchronized Static Methods in a class [duplicate]一个类中的多个同步静态方法[重复]
【发布时间】:2020-08-31 05:54:42
【问题描述】:

我在一个类中有多个同步的静态方法。

 public class DoSomething {
    public static synchronized void fun1()  {
            /*do something time consuming*/
    }

    public static synchronized void fun2()  {
            /*do something time consuming*/
    }
    .
    .
 }

现在只允许一个线程执行类中的任何同步函数。这效率不高,因为这些功能彼此独立并且可以并行运行。 我怎样才能使它们彼此独立,但每个方法只允许一个线程,而对类的更改最少。

【问题讨论】:

  • 你可以在函数内部使用不同锁对象的同步块吗?
  • 在 SO 上,您通常应该指出您到目前为止所尝试的内容。

标签: java multithreading concurrency static synchronized


【解决方案1】:

使用单独的对象锁定:

    private static final lock1=new Object();
    private static final lock2=new Object();

    public static void fun1()  {
       synchronized(lock1) {
            /*do something time consuming*/
       }
    }
    public static void fun2()  {
       synchronized(lock2) {
            /*do something time consuming*/
       }
    }

【讨论】:

  • 感谢您的回答。这是一种方法。但是,在一个类中拥有多个同步方法的目的是什么?另外,如果我将它们设为非静态并使用 Class 对象进行访问,那么哪种方法更好?它们在这种情况下有何不同?
  • 多个同步的非静态方法将确保只有一个线程修改实例状态。静态同步方法已使用 Class 对象锁定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
相关资源
最近更新 更多