1. synchronized块必须给定一个在其上进行同步的对象,并且最合理的方式是,使用其方法正在调用的当前对象:synchronized(this),在这种方式中,如果获得了synchronized块上的锁,那么该对象其他的synchronized方法和临界区就不能被调用了。因此如果在this上同步,临界区的效果就会直接缩小在同步的范围内。
2.在另一个对象上同步。
有时候必须在另一个对象上同步,这样做必须确保所有相关的任务都是在同一个对象上同步的。
下面例子展示了两个任务同时进入同一个对象,只要这个对象上的方法是不同的锁。
3.例1:
package
jiangning.c21;
class
DualSync{
private
Object
syObject
=
new
SyncObject();
public
synchronized
void
f(){