国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

Java多線程模擬售票程序和線程安全問題

2024-07-14 08:40:54
字體:
供稿:網(wǎng)友

Java中線程部分知識(shí)中,售票程序非常經(jīng)典。程序中也有一些問題存在!

需求:模擬3個(gè)窗口同時(shí)在售100張票。

問題1:為什么100張票被賣出了300張票?

原因:因?yàn)閠ickets是非靜態(tài)的,非靜態(tài)的成員變量數(shù)據(jù)是在每個(gè)對(duì)象中都會(huì)維護(hù)一份數(shù)據(jù)的,三個(gè)線程對(duì)象就會(huì)有三份。
解決方案:把tickets票數(shù)共享出來給三個(gè)線程對(duì)象使用。使用static修飾。

問題2: 出現(xiàn)了線程安全問題 ?

線程安全問題的解決方案:sun提供了線程同步機(jī)制讓我們解決這類問題的。

java線程同步機(jī)制的方式:

方式一:同步代碼塊

方式二:同步函數(shù)

class SellTickets extends Thread{      static int tickets=1;//票數(shù) 這里 必須定義為static。不然  非靜態(tài)的成員變量,非靜態(tài)的成員變量數(shù)據(jù)是在每個(gè)對(duì)象中都會(huì)維護(hù)一份數(shù)據(jù)的。三個(gè)線程對(duì)象就會(huì)有三份。   public SellTickets(String threadName) {     super(threadName);   }   public void run() {     while(true){       synchronized ("鎖") {         if(tickets==101){//或者 if(tickets>100){           System.out.println("票已經(jīng)賣完啦-_-...");           break;         }         System.out.println(Thread.currentThread().getName()+"賣了第"+tickets+"號(hào)票");         tickets++;         /*         if(tickets==101){ //錯(cuò)誤的。當(dāng)ticket==101時(shí),只跳出一個(gè)線程。其它兩個(gè)線程還存在tickets++。           break;         }         /*         if(Thread.currentThread().getName().equals("窗口2")){ //窗口2最多只能賣一張票,就結(jié)束了           break;         }         */       }       //System.out.println(Thread.currentThread().getName()+"鎖后...");            }        } }  public class Demo4 {      public static void main(String[] args) {     //創(chuàng)建三個(gè)線程對(duì)象,模擬三個(gè)窗口     SellTickets s1=new SellTickets("窗口1");     SellTickets s2=new SellTickets("窗口2");     SellTickets s3=new SellTickets("窗口3");     //開啟線程售票     s1.start();     s2.start();     s3.start();          System.out.println("main方法...");   } } 


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天台县| 平舆县| 奉节县| 肇州县| 旺苍县| 永康市| 荣成市| 泰兴市| 和田市| 自治县| 刚察县| 宜阳县| 澄迈县| 潢川县| 土默特左旗| 吉安县| 朝阳区| 榆社县| 乐都县| 德阳市| 石棉县| 武义县| 温州市| 宁波市| 苍溪县| 哈密市| 南江县| 原阳县| 津市市| 内丘县| 竹北市| 新巴尔虎左旗| 彭阳县| 康平县| 休宁县| 西宁市| 安新县| 电白县| 黄梅县| 东乡| 禹州市|