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