我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题,所以我们要对线程都要访问的资源加锁,每次只让一个线程去调用,其他线程等待
这里以卖票为例子,需要共同访问的资源就是if里面的ticket
实现方法如下
1、通过使用锁对象进行线程同步
public class RunnaleImpl implements Runnable{
//定义一个票数
private int ticket = 100;
//创建一个锁对象
Object lock = new Object();
//设置线程任务卖票
@Override
public void run() {
//直到把票卖完
while (true) {
synchronized (lock) {
//有票的情况下才卖票
if(ticket > 0){
System.out.pri