:hug:求粉:
(1)同步代码块:
可以指定需要获取哪个对象的同步锁,使用synchronized的代码块同样需要锁,但他的锁可以是任意对象
考虑到安全问题,一般还是使用同一个对象,相对来说效率较高。
注意:
**虽然同步代码快的锁可以使任何对象,但是在进行多线程通信使用同步代码快时,
必须保证同步代码快的锁的对象和,否则会报错。
**同步函数的锁是this,也要保证同步函数的锁的对象和调用wait、notify和notifyAll的对象是
同一个对象,也就是都是this锁代表的对象。
格式:
synchronized(对象)
{
需同步的代码;
}
(2)同步函数
同步方法是指进入该方法时需要获取this对象的同步锁,在方法上使用synchronized关键字,
使用this对象作为锁,也就是使用了当前对象,因为锁住了方法,所以相对于代码块来说效率相对较低。
注:静态同步函数的锁是该方法所在的类的字节码文件对象,即类名.class文件
格式:
修饰词 synchronized 返回值类型 函数名(参数列表)
{
需同步的代码;
}
在jdk1.5后,用lock锁取代了synchronized,个人理解也就是对同步代码块做了修改 |
|