1. 程式人生 > >3分鐘帶你沉迷於執行緒運動

3分鐘帶你沉迷於執行緒運動

1、執行緒安全問題出現的原因 -----

                        多個執行緒訪問統一資源,有可能出現執行緒安全問題

                         解決方法-> Ⅰ使用synchronized鎖{}Ⅱ使用程式碼塊兒解決執行緒安全問題,不能將統一資源的變數放置外面,任何物件都可以當鎖:  每一個物件身體裡面都有一個開關

2、synchronized那些事

 2.1 ynchronized  修飾一個方法,表示該方法是執行緒安全的,即該方法在同一時間點只有一個執行緒在使用,直到該方法執行完畢為止

2.2synchronized  修飾一個非靜態方法:  該鎖指的是這個類的例項化物件  this 

2.3synchronized  修飾一個靜態方法:  該鎖指的是這個類的序列化檔案   WindowThread02.class

  執行緒安全問題: 使用哪個方案比較好?  使用程式碼塊兒
     *     1) 使用程式碼塊兒可以指定鎖物件
     *     2) 使用程式碼塊兒更靈活      程式碼一旦加了鎖,更安全,但是效率極低,我們可以靈活地將出現執行緒安全問題的程式碼塊兒加鎖

4      1、出現安全問題原因?
     *  2、咋解決?  
     *  3、顆粒度 越小越好   synchronized(""){
     *        
     *     }
     *  4、靜態方法和非靜態方法,鎖物件分別指的是?    類的位元組碼檔案        非靜態: 當前的this物件
     *  5、sleep()  不會釋放鎖資源

死鎖:
     *   多個執行緒訪問多個公共資源,有可能出現死鎖
     *   死鎖現象沒有技術可以解決,只有寫程式碼規避

6  // 執行緒的第二種寫法
/**
 * 
 * 1、實現Runnable 介面,重寫run方法
 * 2、例項化實現了Runnable 介面的類,當做引數傳遞給Thread構造方法
 * 3、通過thread的例項化物件啟動執行緒
 * 
 * 
 * 
 * 兩種方案: 哪種好?  第二種好
 *    1、java是單繼承的。   如果你編寫了一個執行緒的子類,就無法繼承其他類
 *    2、java講究   什麼人幹什麼事兒   Thread已經是一個成熟的類,它主要幹啟動執行緒、執行緒等多個操作即可,就沒必要幹業務邏輯的事兒(程式碼可以對多個執行緒共享)
 *        所以如果要寫邏輯,請交給其他類來做。   狗   貓

/**
 * 
 * 如何停止一個執行緒?
 *   建議方案: 使用標誌
 *   
 *   1、stop: 暴力執法,直接停止正在執行的執行緒,而不管你的業務邏輯現在幹什麼?
 *   2、使用標誌停止執行緒,業務邏輯非常完整,非常符合真實的情景
 */

8  

 *    wait() 等待   notify() 喚醒
 *    1、這兩個方法不是Thread裡面獨有的,而是Object類的方法
 *    2、wait() 和 notify() 必須在同步程式碼塊兒或者同步方法中才能呼叫
 *    3、wait()  將當前執行緒進入等待狀態      notify()  喚醒目前執行緒池中的一個等待的執行緒    notifyAll()  喚醒全部
 *    4、wait() 和 notify() 呼叫者是鎖物件
 */