synchronized(this)并不是给当前对象加锁,而是指当一个线程进入同步代码块的时候,其他线程就无法进入该同步代码块,形象的说法就是如同一个人进了厕所之后锁了厕所门,以防止其他人进入厕所。
用synchronized(this)还是public synchronized void 方法名(){}就看你需要同步的代码的情况了,如果某个方法中的代码都需要同步,则用后一种方法,如果某个方法中只有部分代码需要同步,那么用同步代码块,即前一种方式就行。
另外:同步代码块的锁可以是任意的对象,非静态同步函数的锁是this,静态同步函数的锁是字节码文件对象,即 类名.class。 |