互斥锁的定义
- 例子
//1. public synchronized void sell() {} 就是一个同步方法
//2. 这时锁在 this对象
//3. 也可以在代码块上写 synchronize ,同步代码块, 互斥锁还是在this对象
public /*synchronized*/ void sell() { //同步方法, 在同一时刻, 只能有一个线程来执行sell方法
synchronized (/*this*/ object) {
if (ticketNum <= 0) {
System.out.println("售票结束...");
loop = false;
return;
}
- 例子
//1. public synchronized static void m1() {} 锁是加在 SellTicket03.class
public synchronized static void m1() {
}
//2. 如果在静态方法中,实现一个同步代码块.要用类名.class;不能用this,因为静态方法中没有this。
public static void m2() {
synchronized (SellTicket03.class) {
System.out.println("m2");
}
}
优先选择同步代码块怎么理解?
因为锁的东西越少,程序就越高效了。
要求多个线程的锁对象为同一个,怎么理解?
如下图所示: