线程安全问题
同步代码块
1 | package com.yishan.test; |
测试
1 | package com.yishan.test; |
锁对象唯一
- 使用静态Static关键字修饰数据和锁对象,进行共享同一份数据,,可以解决线程安全问题
1 | package com.yishan.test; |
测试
1 | package com.yishan.test; |
同步方法
同步方法和同步代码块的区别:
- 同步代码块可以锁住指定代码,同步方法是锁住方法中的所有代码
- 同步代码块可以指定锁对象,同步方法不能指定锁对象
同步方法的锁对象是 this
同步静态方法的所对象是 类名.class
1 | package com.yishan.test; |
测试
1 | package com.yishan.test; |
Lock锁
- Lock中提供了获得锁和释放锁的方法
- void lock():获得锁
- void unlock():释放锁
Lock是接口不能直接实例化,采用其实现类ReentrantLock来实例化
- ReentrantLock():创建一个ReemtrantLock的实例
1 | package com.yishan.lock; |
测试
1 | package com.yishan.lock; |