java多线程入门案例(2)之多线程简单应用
:
我大概介绍了一下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+" "+"发票数1:"+"剩余"+ticket+" "); } } 窗口类: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下载: