同步代码块的格式是:
synchronized(对象)
{
需要同步的代码;
}
将synchronized写到方法上,就成了同步函数。这时同步代码块上的“synchronized(对象)”括号里面的“对象”就不能自己定义了,但是因为同步函数会被对象调用,但是你不确定对象叫什么名,所以使用到this。
锁的原理:
Java中每个对象都有一个内置锁。当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。当程序运行到synchronized同步方法或代码块时才该对象锁才起作用。一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放。 |