Java——多线程(铁路售票系统案例)
生活随笔
收集整理的這篇文章主要介紹了
Java——多线程(铁路售票系统案例)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題:鐵路售票,一共100張,通過四個窗口賣完。
要求:分別用
繼承Thread類 和 實現(xiàn)Runnable接口 去實現(xiàn)
①用繼承Thread類去實現(xiàn)
package com.yy.syn;public class Demo3_Ticket { /*** 鐵路售票,一共100張,通過四個窗口賣完* 用繼承Thread類去實現(xiàn)* 分析:* 四個窗口就相當(dāng)于四條線程,100張火車票就相當(dāng)于成員變量* * */public static void main(String[] args) {new Ticket().start(); //創(chuàng)建對象,第一條線程new Ticket().start(); //創(chuàng)建對象,第二條線程new Ticket().start(); //創(chuàng)建對象,第三條線程new Ticket().start(); //創(chuàng)建對象,第四條線程}}class Ticket extends Thread{ //繼承Thread類private static int ticket = 100; //四條線程公用這100個成員變量 // private static Object obj = new Object(); //如果用引用數(shù)據(jù)類型的成員變量當(dāng)作鎖對象,必須是靜態(tài)的,這里的obj對象應(yīng)該設(shè)置為static靜態(tài)類型public void run(){ //重寫run()方法while(true){synchronized (Ticket.class) { //這里應(yīng)該變?yōu)閟ynchronized(obj){}if(ticket <= 0){break;}System.out.println(getName() + "...這是第" + ticket-- + "號票");}}} }②用實現(xiàn)Runnable接口去實現(xiàn)
package com.yy.syn;import java.security.GeneralSecurityException;public class Demo4_Ticket {/*** 鐵路售票,一共100張,通過四個窗口賣完* 用實現(xiàn)Runnable接口去實現(xiàn)* 分析:* 四個窗口就相當(dāng)于四條線程,100張火車票就相當(dāng)于成員變量* * */public static void main(String[] args) {MyTicket mt = new MyTicket(); //這里只是創(chuàng)建了一次對象new Thread(mt).start();new Thread(mt).start();new Thread(mt).start();new Thread(mt).start();/*Thread t1 = new Thread(mt);//public void start() 使該線程開始執(zhí)行;Java 虛擬機調(diào)用該線程的 run 方法。多次啟動一個線程是非法的。特別是當(dāng)線程已經(jīng)結(jié)束執(zhí)行后,不能再重新啟動。 t1.start();t1.start();t1.start();t1.start();*/}} class MyTicket implements Runnable{ //讓MyTicket這個類去實現(xiàn)Runnable這個接口private int tickets = 100; //然后,Myticket類里面定義成員變量,這里的票只有100張@Overridepublic void run() {while(true){synchronized (Ticket.class) { //這里的鎖對象也可以是this,即 synchronized (this),因為在主函數(shù)里面只創(chuàng)建了一次對象,這里的this就相當(dāng)于主函數(shù)里面的mtif(tickets <= 0){break;}try{Thread.sleep(10);} catch(InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "...這是第" + tickets-- + "號票" );} //不是Thread的子類,不能直接調(diào)用getName,需要Thread.currentThread().getName()}}private String getName() {return null;}}總結(jié)
以上是生活随笔為你收集整理的Java——多线程(铁路售票系统案例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明天开始搬砖 欢迎大家哈哈
- 下一篇: 会议平板跟投影仪哪个好一点,最近公司想购