synchronized
互斥锁
修饰一个方法或一个代码块时,可以保证在同一时刻最多只有一个线程执行该代码
例:当使用基本数据类型 int 并对其进行操作时,会出现线程不安全的情况。
可以使用两种方法解决:
(1)使用AtomicInteger保证原子性
(2)加锁,使用synchronized修饰方法或代码块


使用synchronized修饰方法后:

或者使用synchronized()锁定代码块:

由于num为基本数据类型,基本数据类型不能锁,所以后面为this,表示锁定当前的对象(ticket)
死锁
使用synchronized()锁住后不能自动释放
可能形成死循环,使程序无法停止



可重入锁
ReentrantLock

可以自动释放锁
本文详细介绍了Java中线程锁的使用方法,包括synchronized关键字的应用、死锁现象的产生及避免方式,以及可重入锁ReentrantLock的特性。通过实例说明了如何确保线程安全,特别关注于基本数据类型在多线程环境下的安全性问题。
395

被折叠的 条评论
为什么被折叠?



