与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/