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

本文通过一个车站购票系统的案例,介绍了Java多线程的基本应用。对比了单线程和多线程环境下购票过程的区别,展示了多线程如何提高效率,并讨论了潜在的并发问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

上一篇文章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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值