关键字 sycronized
当其修饰方法时,同一时间只能有一个对象执行该方法
比如对于卖票程序来说,同一时间只能有一个窗口在执行卖票程序,即只能有一个线程对ticketNum进行操作。
```java
public synchronized void sell() {
if (ticketNum <= 0) {
System.out.println("售票结束...");
flag = false;
return;
}
//休眠50毫秒, 模拟
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("窗口 " + Thread.currentThread().getName() + " 售出一张票"
+ " 剩余票数=" + (--ticketNum));//1 - 0 - -1 - -2
}
互斥锁的概念
上锁时需要考虑,被上锁对象是否为同一个,即对象是否为共享对象
释放锁的情况
不会释放锁的情况