java线程——模拟多窗口售票过程

来源:互联网 发布:局域网监控软件排行 编辑:程序博客网 时间:2024/05/11 00:28

假设有5个售票员,在同时卖100张票,模拟买票过程。

我们知道,在售票过程中,不同窗口同时售票,对于同一张票,不可以出售两次,售票员在售票过程中互不影响,而又需要同时售票。这就需要利用线程来实现。

import java.util.Random;

public class Test {

    public static void main(String[] args) {
        Sellticket sell=new Sellticket();
        Thread t1=new Thread (sell,"张三");
        Thread t2=new Thread (sell,"李四");
        Thread t3=new Thread (sell,"王五");
        Thread t4=new Thread (sell,"赵六");
        Thread t5=new Thread (sell,"田七");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        System.out.println(Thread.activeCount());    
    }
}
class Sellticket implements Runnable{
    private int ticket=100;
    Random rd=new Random();
    public void run(){
        while(ticket>0){
            synchronized (this){  //同步代码块,这段代码块同时只允许一个线程方法
                if(ticket>0){   //控制剩余票数不小于0
                    try {
                        Thread.sleep(rd.nextInt(100)+500); //每运行一次,休眠一秒钟
                        System.out.println(Thread.currentThread().getName()  + "正在卖第  "+ ticket-- +"票.." );
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }else{
                    return;
                }
            }
        }
    }
}
0 0
原创粉丝点击