[javaSE] 多线程售票例子

需求:简单的买票程序,多个窗口卖票,多线程

 

定义一个类Ticket实现Runnable接口,

定义成员属性int类型的票数nums

实现run()方法,run方法中

while(true)的死循环,打印nums--

 

获取Ticket对象,new出来

获取Thread()对象,new出来,构造参数:Runable对象

调用Thread对象的start()方法,开启线程

 

此时会有线程安全问题,使用synchronized同步代码块解决安全问题

 

避免死锁问题,同步中嵌套同步,而锁不同

class Ticket implements Runnable {
    private int nums = 100;

    @Override
    public void run() {

        while (true) {
            synchronized (this) {
                if (nums > 0) {
                    try {
                        Thread.sleep(10);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "==="
                            + (nums--));
                }else{
                    break;
                }

            }
        }
    }

}

class TicketDemo {

    /**
     * @param args
     */
    static  main(String[] args) {
        Ticket ticket = new Ticket();
         Thread(ticket).start();
         Thread(ticket).start();
    }

}

 

相关文章

@ 注解能被用来为程序元素( 类、 方法、 成员变量等) 设置...
@ 1、线性表的概念 线性表是最常见也是最简单的一种数据结构...
简介 ArrayList是开发中使用比较多的集合,它不是线程安全的...
在 Java String类源码阅读笔记 里学习了String类的源码,Str...
话不多说,先上图。 1、基本概念 欲说线程,必先说进程。 进...
@ 网络基础 计算机网络是指两台或更多的计算机组成的网络,在...