与同步方法相比,synchronized语句如何加速代码?

 public void stageOne() {

    synchronized (lock1) {
        list1.add(random.nextInt(100));
    }
}

public void stageTwo() {

     synchronized (lock2) {
        list2.add(random.nextInt(100));
    }
}
public void process() {
    for (int i = 0; i < 1000; i++) {
        stageOne();
        stageTwo();
    }
}


    Thread t1 = new Thread(new Runnable() {
        public void run() {
            process();
        }
    });

    Thread t2 = new Thread(new Runnable() {
        public void run() {
            process();
        }
    });

如果我使用public synchronized void stageOne()public synchronized void stageTwo(),则该程序将花费更多时间来完成。

最佳答案

如果将stageOne()stageTwo()声明为synchronized,则它们将使用相同的锁。该锁将是包含这些方法的对象。这将意味着这些方法不能同时执行。

由于您有两个方法和两个线程,因此将有四个方法争用同一把锁。如果两个方法都有自己的锁(如您提供的代码中所示),则可以同时执行每个方法的一个实例。

关于java - 多个锁如何加速多线程代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28305043/

10-09 05:40
查看更多