你的位置:首页 > Java教程

[Java教程][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;        }      }    }  }}public class TicketDemo {  /**   * @param args   */  public static void main(String[] args) {    Ticket ticket = new Ticket();    new Thread(ticket).start();    new Thread(ticket).start();    new Thread(ticket).start();    new Thread(ticket).start();  }}