欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三个窗口同时卖票 用 实现Runnable方式

程序员文章站 2024-03-05 18:44:07
...

多线程买票

大致分析:
多窗口即多线程,这里的窗口个数就是线程对象数
先设置总票数 在run方法里实现买票 借助循环重复完成买票这一动作 每卖完一张票总数–(减减) 直到票卖完退出循环
最后开启线程 执行run方法

public class ThreeRun implements Runnable{

    private static int num=20;//定义总票数
    private static Object o=new Object();//定义一个静态对象

    @Override
    public void run() {

       //循环卖票
        while (true){
            try {
               //模拟卖票耗时操作  (单位:毫秒值)
                Thread.sleep(1500);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //同步锁
            synchronized (o){
                if (num>0){
                    System.out.println("还有"+num+"张票");
                    num--;
                }else {
                    System.out.println("票已售空");
                    System.exit(0);
                }
            }
        }
    }

//当两个并发线程(th1和th2)访问同一个对象中的synchronized代码块时在同一
//时刻只能有一个线程得到执行,另一个线程受阻塞,必须等待当前线程执行完
//这个代码块以后才能执行该代码块。Thread1和thread2是互斥的,因为在执行
//synchronized代码块时会锁定当前的对象,只有执行完该代码块才能释放该对
//象锁,下一个线程才能执行并锁定该对象。 


    public static void main(String[] args) {
       //三个线程  相当于开启了三个窗口同时卖票
        ThreeRun th1 = new ThreeRun();
        Thread t1 = new Thread(th1);
        t1.start();

        ThreeRun th2 = new ThreeRun();
        Thread t2 = new Thread(th2);
        t2.start();

        ThreeRun th3 = new ThreeRun();
        Thread t3 = new Thread(th3);
        t3.start();

    }
}

运行结果如下:三个窗口同时卖票 用 实现Runnable方式

相关标签: 练习题 java