在Java中多个线程操作共享数据的时候,为了数据安全会用到锁,但是到底使用哪里的锁经常容易搞错,会导致锁的失效,这里就介绍一下锁的注意事项,这里举得还是买票的例子
锁(同步监视器)的要求
- 任何一个类的对象都可以充当锁
- 但是多个线程必须公用同一个锁
- 只要满足上面的两个条件就可以当作锁
代码实现接口Runnable的方式
class Window implements Runnable{
private int ticket = 30;//三十张票
Object obj = new Object();//声明锁
@Override
public void run() {
while (true){
synchronized (obj) {
//同步代码块
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + "获得了第:" + ticket + "张票!");
try {
Thread.sleep(100);//休眠100毫秒使其容易出现错误
} catch (InterruptedException e) {
e.printStackTrace()