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

首頁 > 學院 > 開發設計 > 正文

黑馬程序員系列第一篇多線程(1)

2019-11-14 15:07:36
字體:
來源:轉載
供稿:網友

asp.net+Android+IOS開發  、Net培訓、期待與您交流!

 

(前言:本篇文章主要依據畢向東老師的課程視頻整理而成,如要詳細學習,請觀看畢老師視頻  百度網盤鏈接地址:http://pan.baidu.com/s/1sjQRHDz)

 

目錄:一、線程的兩種創建方式        二、線程的五種狀態、線程操作中常用的方法        三、多線程安全  四、使用同步的弊端         五、單例設計模式中的多線程(面試重點)

 

一、線程的兩種創建方式

      1、實現Runnable接口(主流)

          代碼示例:

 1 public class ThreadTest{ 2      3     public static void main(String[] args) throws InterruptedException{ 4       ThreadImple ti=new ThreadImple(); 5       Thread thread=new Thread(ti); 6        7       thread.start(); 8 } 9 }10  class ThreadImple implements Runnable {11 12     @Override13     public void run() {14         for(int i=0;i<60;i++)15         System.out.i);16     }17 }

 

 

      2、繼承Thread類

     

 

 

 

      3、兩種創建方式的區別

            實現方式的運行代碼存放在接口子類的run方法中;實現方式避免了單繼承的局限性,建議使用

        繼承方式的運行代碼存放在Thread子類的run方法中

   

二、線程的五種狀態    線程操作中常用的方法

 

 

三、多線程安全

        問題:一個線程操作多條語句來共享數據時,一個線程對多條語句只執行了一部分,另一個線程便參與進來執行了,導致共享數據出錯。

        如何尋找問題:  1、明確哪些代碼示多線程運行代碼     2、明確共享數據     3、明確多線程運行代碼中哪些語句是操作共享數據的。

  解決辦法:同步代碼塊:

             Synchronized( 鎖 ){

                  需要被同步的代碼;

             }

                       同步函數:在函數前加synchronized修飾符。

  使用同步要滿足三個前提:1、必須有兩個或兩個以上線程  2、必須是多個線程使用同一個鎖

  弊端:每次執行時都要判斷鎖,浪費資源。

  普通同步函數的鎖是this ,靜態函數的鎖是其所在文件字節碼對象(.class)

      簡單模擬售票代碼:

 

 

     使用同步代碼塊的方式改進后的程序

   

 

 

 

 

四、使用同步會出現死鎖情況(面試時會要求寫一個死鎖程序)

      問題:多線程各自持有不同的鎖沒釋放,而又彼此需要對方的鎖。

    原因:同步中嵌套同步,而它們的鎖卻不同

 一個簡單的死鎖程序:

 

 

 

五、單例設計模式中的多線程(面試重點)

       餓漢式、懶漢式(是線程不安全的,需要同步)

       將懶漢式同步有兩種方式:

        1、下面代碼中在getInstance方法前用synchronized修飾,通過同步函數來解決,每次都要同步比較消耗資源   

        2、就是注釋中用同步塊的方式,用雙重判斷(s==null)只需同步一次,避免多消耗資源,推薦使用

 

 

       

       初學者難免錯誤,歡迎評判指教,持續更正ing...........

 

ASP.Net+Android+IOS開發  、Net培訓、期待與您交流!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 比如县| 瑞昌市| 辽中县| 哈巴河县| 嘉善县| 浮山县| 明溪县| 尉氏县| 秦皇岛市| 新和县| 确山县| 洛川县| 金溪县| 南丹县| 射阳县| 岐山县| 娄烦县| 措美县| 囊谦县| 公主岭市| 迁西县| 本溪| 五寨县| 江达县| 抚松县| 扎兰屯市| 万全县| 水富县| 土默特右旗| 保德县| 建瓯市| 开远市| 堆龙德庆县| 彭州市| 鹤庆县| 铅山县| 长沙县| 苏尼特左旗| 色达县| 潜江市| 金昌市|