温故而知新:多线程入门程序之窗口卖票详解编程语言

实现多线程接口

TicketWindow类实现Runnable接口,以便在Java代码中使用TicketWindow的构造方法创建线程。

package com.jake.easyerp.thread; 
 
public class TicketWindow implements Runnable {
    
 
    public TicketWindow(int total) {
    
        this.total = total; 
        this.left = total; 
    } 
 
    private int total; 
 
    private int left; 
 
    @Override 
    public void run() {
    
        while (true) {
    
            synchronized (this) {
    
                if (left > 0) {
    
                    try {
    
                        Thread.sleep(100); 
                    } catch (InterruptedException e) {
    
                        e.printStackTrace(); 
                    } 
                    System.out.println(Thread.currentThread().getName() + "售出了第" + 
                                    (total - left-- + 1) + "张票," + 
                                    "还剩" + left + "张票"); 
                } else  {
    
                    System.out.println("票已售完,请下次再来"); 
                    System.exit(0); 
                } 
            } 
        } 
    } 
 
} 
 

main方法所在测试类

注意,[email protected],则无法正常运行,只能通过断点单步执行,才能看到控制台打印效果。
这一点有待继续研究。

package com.jake.easyerp.thread; 
 
public class RunnableMain {
    
 
    public static void main(String[] args) {
    
        TicketWindow window = new TicketWindow(10); 
        Thread t1 = new Thread(window, "窗口一"); 
        Thread t2 = new Thread(window, "窗口二"); 
        Thread t3 = new Thread(window, "窗口三"); 
        Thread t4 = new Thread(window, "窗口四"); 
        t1.start(); 
        t2.start(); 
        t3.start(); 
        t4.start(); 
    } 
 
} 
 

打印结果

窗口一售出了第1张票,还剩19张票 
窗口一售出了第2张票,还剩18张票 
窗口四售出了第3张票,还剩17张票 
窗口三售出了第4张票,还剩16张票 
窗口三售出了第5张票,还剩15张票 
窗口二售出了第6张票,还剩14张票 
窗口二售出了第7张票,还剩13张票 
窗口三售出了第8张票,还剩12张票 
窗口四售出了第9张票,还剩11张票 
窗口一售出了第10张票,还剩10张票 
窗口一售出了第11张票,还剩9张票 
窗口四售出了第12张票,还剩8张票 
窗口三售出了第13张票,还剩7张票 
窗口二售出了第14张票,还剩6张票 
窗口三售出了第15张票,还剩5张票 
窗口四售出了第16张票,还剩4张票 
窗口一售出了第17张票,还剩3张票 
窗口四售出了第18张票,还剩2张票 
窗口三售出了第19张票,还剩1张票 
窗口二售出了第20张票,还剩0张票 
票已售完,请下次再来 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19613.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论