synchronized
互斥锁
修饰一个方法或一个代码块时,可以保证在同一时刻最多只有一个线程执行该代码
例:当使用基本数据类型 int 并对其进行操作时,会出现线程不安全的情况。
可以使用两种方法解决:
(1)使用AtomicInteger保证原子性
(2)加锁,使用synchronized修饰方法或代码块
使用synchronized修饰方法后:
或者使用synchronized()锁定代码块:
由于num为基本数据类型,基本数据类型不能锁,所以后面为this,表示锁定当前的对象(ticket)
死锁
使用synchronized()锁住后不能自动释放
可能形成死循环,使程序无法停止
可重入锁
ReentrantLock
可以自动释放锁