线程 2. synchronized 同步代码块

2017-05-28  本文已影响0人  灰气球
/*
练习:模拟车站卖50张票。  不准出现线程安全问题。
 */
class SaleTickets extends Thread{
    static  int num = 50;  //非静态成员变量。 非静态成员变量在每个对象中都维护了一份数据。
    static  Object o = new Object();
    public SaleTickets(String name){
        super(name); //调用父类一个参数的构造函数, 初始化线程的名字。
    }
    //线程的任务代码...
    @Override
    public void run() {
        while(true){
            synchronized ("锁") {
                if(num>0){
                    try {
                        Thread.sleep(100);
                        System.out.println(Thread.currentThread().getName()+"卖出了"+num+"号票");
                        num--;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }else{
                    System.out.println("售罄了...");
                    break;
                }
            }
        }
    }
}
public class Demo4 {
    public static void main(String[] args) {
        //创建线程对象
        SaleTickets thread1 = new SaleTickets("窗口1");
        SaleTickets thread2 = new SaleTickets("窗口2");
        SaleTickets thread3 = new SaleTickets("窗口3");
        //开启线程
        thread1.start();
        thread2.start();
        thread3.start();
    }
}

上一篇 下一篇

猜你喜欢

热点阅读