我很奇怪,为什么Java要求一个对象在一个 synchronized
块,即
synchronized(object) {
// stuff
}
为什么我不能使用一个简单的块 而不指定任何对象?比如说
synchronized {
// stuff
}
根据 文件:
本质锁和同步化。
同步化是围绕着一个被称为 "同步 "的内部实体建立的。固有锁 或 监视器锁. (API规范经常把这个实体简单地称为 "监视器"。)内在锁在同步的两个方面都起着作用:强制对对象的状态进行排他性访问,并建立对可见性至关重要的发生前关系。 每个对象都有一个与之相关的固有锁。 按照惯例,一个需要对对象的字段进行独占性和一致性访问的线程,必须在访问这些字段之前获得对象的固有锁,然后在处理完这些字段后释放固有锁。
同步语句
另一种创建同步代码的方法是使用同步语句。与同步方法不同。同步语句必须指定提供内在锁的对象。.