最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年05月20日 15:17:55   作者:syhleo  
本篇文章給大家分享了Java多線程模擬售票程序和線程安全問題的相關(guān)知識點,對此有興趣的朋友可以參考學(xué)習(xí)下。

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

需求:模擬3個窗口同時在售100張票。

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

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

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

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

java線程同步機制的方式:

方式一:同步代碼塊

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

class SellTickets extends Thread{ 
   
  static int tickets=1;//票數(shù) 這里 必須定義為static。不然  非靜態(tài)的成員變量,非靜態(tài)的成員變量數(shù)據(jù)是在每個對象中都會維護(hù)一份數(shù)據(jù)的。三個線程對象就會有三份。 
  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+"號票"); 
        tickets++; 
        /* 
        if(tickets==101){ //錯誤的。當(dāng)ticket==101時,只跳出一個線程。其它兩個線程還存在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)建三個線程對象,模擬三個窗口 
    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)文章

  • mybatis的動態(tài)SQL和模糊查詢實例詳解

    mybatis的動態(tài)SQL和模糊查詢實例詳解

    這篇文章主要給大家介紹了關(guān)于mybatis的動態(tài)SQL和模糊查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java定義泛型接口和類的方法實例分析

    Java定義泛型接口和類的方法實例分析

    這篇文章主要介紹了Java定義泛型接口和類的方法,結(jié)合實例形式分析了泛型相關(guān)概念、原理及泛型接口與類的定義實現(xiàn)方法,需要的朋友可以參考下
    2019-08-08
  • Mybatis-Plus?CRUD操作方法

    Mybatis-Plus?CRUD操作方法

    通用?Service?CRUD?封裝?IService?接口,進(jìn)一步封裝?CRUD?采用?get?查詢、remove?刪除?、list?查詢集合、page?分頁的前綴命名方式區(qū)分?Mapper?層避免混淆,這篇文章主要介紹了Mybatis-Plus?CRUD的相關(guān)知識,需要的朋友可以參考下
    2023-10-10
  • maven加載依賴報錯的原因分析及解決方法

    maven加載依賴報錯的原因分析及解決方法

    通常我們在項目中引入第三方依賴包時,為了避免其版本迭代問題,經(jīng)常會使用本地的包,這篇文章主要給大家介紹了關(guān)于maven加載依賴報錯的原因分析及解決方法的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實例

    Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實例

    今天小編就為大家分享一篇關(guān)于Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • SpringBoot?熱搜與不雅文字過濾的實現(xiàn)

    SpringBoot?熱搜與不雅文字過濾的實現(xiàn)

    本文主要介紹了SpringBoot?熱搜與不雅文字過濾的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 徹底解決tomcat中文亂碼問題方案

    徹底解決tomcat中文亂碼問題方案

    這篇文章主要介紹了徹底解決tomcat中文亂碼問題方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • springboot整合Shiro

    springboot整合Shiro

    這篇文章主要介紹了SpringBoot整合Shiro一些方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • java 通過cmd 調(diào)用命令啟動tomcat的操作

    java 通過cmd 調(diào)用命令啟動tomcat的操作

    這篇文章主要介紹了java 通過cmd 調(diào)用命令啟動tomcat的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java使用正則表達(dá)式獲取子文本的方法示例

    Java使用正則表達(dá)式獲取子文本的方法示例

    這篇文章主要介紹了Java使用正則表達(dá)式獲取子文本的方法,結(jié)合實例形式分析了java針對子文本的正則操作相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2017-09-09

最新評論

临潭县| 和平区| 皮山县| 麻城市| 明光市| 枞阳县| 湖北省| 杭锦旗| 三河市| 乐都县| 光山县| 宜阳县| 鄂托克旗| 塔河县| 阿克陶县| 天全县| 古浪县| 杭锦旗| 沅陵县| 七台河市| 驻马店市| 临猗县| 隆安县| 正蓝旗| 赫章县| 鄂尔多斯市| 通州区| 临邑县| 乐至县| 新营市| 高淳县| 嘉鱼县| 横峰县| 昆明市| 邻水| 图们市| 边坝县| 陵水| 泰宁县| 洪湖市| 周口市|