A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ARCHER1lz 初级黑马   /  2019-10-10 13:56  /  1013 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class SellTicket02 implements Runnable {

    private int tickets = 100;
    private Lock lock=new ReentrantLock();

    @Override
    public void run() {
        while (true) {
            try {
                lock.lock();
                if (tickets > 0) {
                    try {
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票");
                    tickets--;
                }
            }finally {
                lock.unlock();
            }

        }
    }
}
-------------------------------------------------------------------------------------------------------------------
public class SellTicket implements Runnable {

//    private int tickets = 100;
    private static int tickets = 100;
    //private Object obj=new Object();
    private int x=0;

    @Override
    public void run() {
        while (true) {
           if(x%2==0){
//               synchronized (this){
               synchronized (SellTicket.class){
                   if (tickets > 0) {
                       //通过sleep模拟出票时间
                       try {
                           Thread.sleep(1);
                       } catch (InterruptedException e) {
                           e.printStackTrace();
                       }
                       System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票");
                       tickets--;
                   }
               }
           }else {
               sellTic();
           }
           x++;
        }
    }

//    private synchronized void sellTic() {
private static synchronized void sellTic() {
        if (tickets > 0) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票");
            tickets--;
        }
    }
}
-----------------------------------------------------------------------------------------------------------------------
public class SellTicketDemo   {
    public static void main(String[] args) {
//        SellTicket st=new SellTicket();
        SellTicket02 st=new SellTicket02();

        Thread t1=new Thread(st,"窗口一");
        Thread t2=new Thread(st,"窗口二");
        Thread t3=new Thread(st,"窗口三");

        t1.start();
        t2.start();
        t3.start();
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马