java多线程入门案例(2)之多线程简单应用

 

上一篇文章java多线程案例(1)之简单银行取款问题及其优化

我大概介绍了一下Java代码优化的问题,主要针对出学者而言,这一次我要介绍多线程应用的简单案例 。网上有许多多线程的案例,但大多都挺复杂的,今天我主要目的也是介绍一下多线程应用的简单案例,让初学者对多线程有初步了解。

    大概案例:几个人同时在一个车站购票,车站分几个窗口,窗口同时售票100,每出售一张票就打印出来,车票售空停止打印。

       对于拿到手的案例,应具体分析一下,几个人同时在窗口买票,如果没有多线程,会出现什么样的情况,如果加上多线程又会是一个怎么样的结果。现在我们就把这两种不同情况具体分析。

情况(1)没有多线程

如果没有多线程,不同的人在同一时刻只能在同一个线程下购票,可能会出现网络拥堵,每次只能一个人占用线程,只能一个人进行购票。

情况(2)有多线程

如果有多线程,不同的人购票时都有各自的线程,同一时刻购票,互不影响。但这里面又有Bug,至于这个Bug,下个博客将进行介绍分析。

主函数类:main.java

public class main {

/*主函数入口*/

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Station station=new Station();
        Window window1=new Window("win1",2000);
        window1.start();
        Window window2=new Window("win2",2000);
        window2.start();
        Window window3=new Window("win3",2000);
        window3.start();
        Window window4=new Window("win4",2000);
        window4.start();
    }

}

车站类:Station.java

public class Station {
    public static int ticket=100;
    
    public static void buy_ticket(String win_name) {
        ticket--;
        System.out.print(win_name+"\n"+"发票数1:"+"剩余"+ticket+"\n");
    }
}

窗口类:Window.java     //继承多线程类Thread

public class Window extends Thread{

    private String win;
    private int deltime;
    public Window(String win, int deltime) {
        // TODO Auto-generated constructor stub
        this.win=win;
        this.deltime=deltime;
    }
    @Override
    public void run() {
        while(Station.ticket>0) {
            Station.buy_ticket(win);
            try {
                sleep(deltime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

具体运行效果:

以上运行效果中的Bug,也就是我在开头讲的Bug,下次博客将会进行介绍及给出解决。

以上工程具体代码可以在github下载:https://github.com/whitedouble/whitedouble.git

猜你喜欢

转载自blog.csdn.net/weixin_40438421/article/details/83339873