之前有一个买票的案例,当时多个线程之间不是安全的,这是我们遗留的问题,今天来解决它
我们之前提到,线程不安全主要是资源被每个对象都可以使用,导致了多个线程在抢夺一份资源时,都误以为自己拿到了
那么我们就需要给这个资源加一把锁 来使用以下 synchronized
//安全的买票
public class UnSafe {
public static void main(String[] args) {
BuyTicket station = new BuyTicket();
new Thread(station,"你").start();
new Thread(station,"别人").start();
new Thread(station,"黄牛党").start();
}
}
class BuyTicket implements Runnable{
private int numticket = 10;
boolean flag = true;//外部停止方法
@Override
public void run() {
while (flag){
try {
buy();
//Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//synchronized 将其变成同步方法
private synchronized void buy() throws InterruptedException {
//判断是否有票