java - 多锁如何加速多线程代码?

标签 java multithreading

与synchronized方法相比,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/

相关文章:

c# - 如何等待异步命令进行单元测试?

Java DOM 解析器 XML

java - libgdx 中的抗锯齿填充形状

java - 如何配置 Tomcat 以使用 Java 7

java - 用于 API 不同部分的多个 ObjectMapper

java - 同步对ArrayList的访问

java - entityManager.flush()会清除二级缓存吗?

java:将类引用传递给另一个线程

c - 在多线程环境中两个函数之间共享公共(public)变量

java - 创建过多的线程