【发布时间】:2016-05-08 04:33:37
【问题描述】:
我正在阅读有关 Java 中的多线程编程的 Oracle 教程。我不明白为什么要创建一个新对象来同步代码的某些部分?为什么要创建新的虚拟对象?
我明白创建这两个对象会阻止编译器重新排序由构造 syncronized(lock1){} 保护的代码段{}
但是,我想知道我可以在构造 syncronized(lock1){} 中使用任何其他对象(MsLunch 除外)吗?
引入这种构造 syncronized(lock1){} 的动机是什么?
这是我关心的一段代码:
public class MsLunch {
private long c1 = 0;
private long c2 = 0;
// what is the purpose of these two objects? how do they serve as locks?
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}
【问题讨论】:
标签: java multithreading