接 https://blog.youkuaiyun.com/godkzz/article/details/119390742?spm=1001.2014.3001.5501
线程安全问题除了同步代码块,还可以用锁解决
1.创建ReentrantLock对象
2.在需要同步块前加上方法 lock() 加锁
3.在需要同步块后加上方法 unlock() 释放锁
public class RunnableImpl implements Runnable {
private int ticket = 100;
ReentrantLock mylock = new ReentrantLock();//创建一个ReentrantLock对象
@Override
public void run() {
while (true) {
mylock.lock();//加锁
if (this.ticket > 0) {
System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket-- + "张票");
} else {
break;
}
mylock.unlock();//释放锁
}
}
}