基本介绍
1、Java语言中、引入了对象互斥锁的概念、来保证共享数据操作的完整性
2、每个对象都对应于一个可称为“互斥锁”的标记、这个标记用来保证在任一时刻,只能有一个线程访问该对象。
3、关键字synchronized来与对象的互斥锁联系、当某个对象用synchronized修饰的时候、表明该对象在任一时刻只能由一个线程访问。
4、同步的局限性:导致程序的执行效率要降低。
5、同步方法(非静态的)的锁可以是this,也可以是其他对象(要求是同一个对象)
6、同步方法(静态的)的锁应当是类本身
class SellTicket08{
public static void sell(){
synchronized(SellTicket08.class){ --- 静态的锁是类本身,this不行
System.out.println("代码块");
}
}
}
注意事项和细节
1、同步方法如果没有使用static修饰:默认锁对象为this
2、如果方法使用static修饰:默认对象为当前类.class
3、实现的落地步骤
需要先分析上锁的代码
选择同步代码块或同步方法,范围能越小则越好,毕竟影响效率
要求多个线程的锁对象为同一个即可!
网友评论