1. 程式人生 > >java執行緒基礎方面的總結-多執行緒(一)

java執行緒基礎方面的總結-多執行緒(一)

1:  同學,解釋一下什麼是執行緒,什麼是程序,我們為什麼要使用多執行緒

   我的理解就是程序就是一段可執行的程式,而線相當於執行這段程式中一個可執行的單元

     接下來我們從兩個方面解釋為什麼要使用多執行緒

  1. 減少響應得到時間,我們如果使用單執行緒的話,例如某個操作很耗時間,但它一直能夠佔用著cpu,這個時候下面的一個執行緒操作必須等待,使用者得不到響應,體驗肯定不是太好
  2.  有利於資源的利用率,我們現在電腦都是多核,如果使用單執行緒,計算機的資源得不到有效利用,浪費可恥啊,我們使用多執行緒能夠提高CPU的利用效率

2:來,親,解釋下同步和非同步的區別

       哦哦,為什麼有同步和非同步呢,在多執行緒中,我們經常涉及到資料共享的問題,就是多個執行緒需要訪問某個資源,他們需要按照某種規則來訪問,確保這個資源在同一時刻只能被某個執行緒來使用,否者那還不GG, 為了不gg這個時候我們就需要對資料進行同步.這就是我理解同步的概念

非同步的話就是,每個執行緒能實現自給自足,執行緒裡面包含執行時需要的資料和方法,我們不鳥其他的執行緒,自己幹自己,不必看其他執行緒的狀態,也不用等到其他執行緒輸入速出才返回

同步和非同步區別的話

    打個比方吧,放學了,你喊去吃飯,如果我聽到了,咱兩個一塊去吃飯,如果我沒聽到,你就一直喊喊,直到我告訴你說我聽到了,咱兩一塊去吃飯,這個就是同步.非同步就是,你喊我吃飯,喊過之後你自己屁顛屁顛的走了,我聽見你喊我之後有可能立即走,也肯能等會再走.

 2.1:解釋挺好的,那麼咱怎麼實現同步和非同步的操作呢

     java語言提供了synchronized關鍵字來實現同步(一種是同步的方法,另一種是同步程式碼塊),非同步的話我感覺多執行緒來解決吧(待考證)

2.1.1: syschronized是怎麼實現同步的呢

       要想實現同步,必須獲得每個執行緒物件的鎖,獲得它之後我們就可以保證在同一時刻只有一個執行緒進去臨界區(互斥資原始碼塊),在這個鎖被釋放之前,其他執行緒想獲得這個物件的鎖,只能進去等到佇列中去等著去.一直等到鎖釋放之後,等待佇列中優先級別高的獲得鎖

2.2:非阻塞和阻塞的區別    

        阻塞就是得到返回值返回之前,該執行緒被掛起.只有得到函式返回值之後,執行緒才會返回

       非阻塞就是,不用得到返回值,執行緒繼續改幹嘛幹嘛,

   2.2.1我們簡單區分一下同步,非同步,阻塞,非阻塞的區別

          在家你媽讓你燒開水,得到這個指令之後你必須行動呀,你偉大的任務可以有四種狀態來完成這個

1:在廚房裡面燒水,你一直在廚房裡等著(阻塞),眼睛一直盯著水壺(同步)  這就叫同步阻塞

2: 在廚房中,一直在那等著(阻塞),這個時候不用盯著了,聽到水壺響了(非同步) ,這個時候你知道水燒開了

        3 :在廚房裡燒水,在燒水的過程中,你可以偷摸去客廳去看個電視(非阻塞),但你必須時不時去廚房看看水燒開了沒有(輪詢  檢查同步結果)

         4:在廚房裡燒水,在燒水的過程中,你可以偷摸去客廳去看個電視(非阻塞),不用跑廚房了,在客廳挺水響就行了,(非同步)

              上面四個狀態能完成燒水的任務

         同步是一種執行緒的操作,阻塞是執行緒的一種狀態(記住這句話就行了)