java基礎-Java 多線程(二)(第十八節)

​好了, 我們新開篇幅,繼續嗶嗶,因爲線程確實比較重要,後面如果繼續學安卓的,線程會經常用到,我們這裏就多嗶嗶一些,雖然困,但是我比你們還困啊,嗶嗶這玩意是真的困,細節好多,我們挑重點簡單講,希望幫助大家理解起來不那麼吃力,更容易懂;好了, 繼續。。。

 

一、線程管理

內容比較多,我們講重點,講經常遇到的,線程睡眠(sleep)、線程優先級(Priority)、結束線程、線程同步、線程死鎖

看着挺多東西的,確實挺多的,我們一個一個來,不要慌,問題不大;

;老規矩,先安靜下,我先舉個栗子;

 

     

比如,你現在正在追一個漂亮的小姐姐,非常漂亮那種,不追不行,但問題是,像你一樣的想法的小帥哥,還有10個,也在追得火熱,小姐姐也是樂在其中,無論你們怎麼折騰,她都嗯嗯呃呃,一句隨緣讓你們欲罷不能;圍繞追這位小姐姐也就就發生了各種事情,下面我們一一道來,要搬凳子,買瓜子的,趕緊去;

 

開始講:

 

一、線程睡眠

   話說有一天,你公司老闆跟你說,小XX啊,公司目前正在快速發展農村業務,這個月,就辛苦你跑一趟農村,在農村建一個分公司,然後你就可以回來了,就2個月,很快的,工資給你加一半,你一聽,工資加班,2個月後就可以回來,肯定妥妥的答應了啊,但由於這個時候你還在追那個漂亮的小姐姐,並且小姐姐身邊還有9個情敵,你肯定不能一聲不吭的就跑農村去了啊,這個時候你就跑去跟小姐姐解釋說你要去趟農村發展業務,但是我是不會放棄你的,很不巧的是,那個農村,手機信號都沒有,這個時候你追妹子的行動基本就停止了,壓根聯繫不上,

     那麼重點來了,這個過程,就是我們說的線程睡眠,追妹子追着追着,暫停2個月,2個月後繼續回來追,就這個道理,其實線程睡眠很好理解,就跟你吃飯的時候,中途喝口水休息一下差不多,使用的場景也比較多,比如,你要陸陸續續打印10個數字在屏幕上,但是想裝個比,不想一次性全部打印出來,這個時候怎麼辦??

很簡單:(try catch是異常捕獲,後面會說)

這個時候,屏幕就會每隔一秒打印一個數字了。

 

二、線程優先級

    線程優先級我們需要理解一下這個概念,爲了更好的理解這個概念,我們繼續說你們追妹子那件事,由於追的人實在太多,妹子時間有限,不可能每個備胎都照顧得到,這個時候妹子根據你們目前的表現在心裏就給你們10個人排了一下序,越排前面的就表示越有追到的可能;

     這個概念,就跟我們說的線程優先級一樣,系統資源有限,不能哪個線程要資源就給哪個資源,系統也會給各個線程默認給個優先級,我們在實際開發過程中,也會根據需要設置線程的優先級,以便更好,更合適的使用系統資源,優先級一共是10個程度,1-10數字表示,那麼問題來了,是不是說,你設置某個線程的優先級爲10,就一定比優先級爲1的優先嗎?

 

      這個我們想想那個妹子就知道了,妹子給某個帥哥設置重要程度爲10,給你設置重要程度爲1,某天妹子約了那個優先級爲10 的帥哥去吃飯,但是妹子先到,帥哥還沒來,巧的是,你剛好在那個餐廳刷盤子,於是這個時候,你就厚臉皮的坐過去,請妹子吃飯了,由於妹子對你還是有好感的,妹子是有可能打電話告訴那個帥哥,她臨時有事,不能去赴約,然後跟你吃飯的,爲什麼??因爲她對你是有好感的,並且你已經坐過來了,她也不想讓那個帥哥看到你也在。,所以,迫於各種壓力,你是有機會優先陪她吃飯的。是不是這個理。

   好了,理解就好了,看代碼:

說明一下,這裏創建了3個線程,線程1的優先級1,線程2的優先級爲5,線程3的優先級爲10,運行結果,不考慮我們設置的優先級的話,就是默認優先級都是5,那麼結果大部分情況是1,2,3;很少概率出現1,3,2;或者其他情況;設置了優先級之後, 大部分情況就變成了1,3,2,其他情況概率變小;這裏說明一下,設置優先級的目的就是爲了增大線程獲得系統資源的概率,優先級高的線程獲取CPU資源的概率較大,優先級低的並非沒機會執行

 

三、結束線程

  結束線程並不容易,就比如你追妹子,色字當頭,想不追都難啊,對不對?,結束追妹子的行動有下面幾種情況:第一種就是妹子覺得你是在太醜,強烈要求你滾蛋,第二種,妹子對你愛答不理,你心灰意冷,自動退出;

第三種,妹子追到手了,娶回家了,不用再追了;第一種方式,基本你是結束不掉的,要不然也不會有舔狗了,第二種方式,成功退出,心裏也會慢慢放下,第三種方式,自然而然結束,沒啥好說的。

      追妹子的這三種結束方式和線程其實一毛一樣,首先,第一種方式就相當於我們手動調用線程的stop()方法,或者interrupt()方法,這種結束方法,被谷歌逐漸拋棄,很不安全,就跟你追妹子一樣,搞不好真有渣男,把妹子毀了也不讓別人得到,對吧,網上不少這樣的事情,所以是不安全的;仔細看代碼,stop方法是灰色額,並且被劃掉了,說明被放棄了這個方法,但是,點運行後,你會發現,線程確實是中斷了,運行結果欄目是沒有結果輸出的。

 

    第二種方式在線程裏面就相當於我們線程執行過程,自己設置條件,比如線程執行過程不滿足某個條件,就直接跳出執行代碼,提前結束線程,這個是相對安全的,有句話叫哀莫大於心死,自己放下了纔是安全的,對吧。

結果是本來打印10個數字的,但是最後只會打1個數字,就被中斷了;

 

   第三種方式,本質上不叫中斷,是叫執行完畢了,線程都執行完了,自然也就退出了。這種不貼代碼了,就是正常執行完的意思;

 

 四、線程同步

       目前階段,建議理解概念就好,實際項目開發過程中才是你最好的學習這個的時候,理解起來不難,還是說說追妹子的事,要不然太無聊了

       是這樣的,情人節那天,你們10個人都對妹子說,今天晚上我預定了某某電影院的XX電影,想跟你一起去看,妹子一下子收到這麼多短信,肯定就慌了,到底跟誰去好呢,總不能一起去吧,,到時候打起來可就拉都拉不住了;;這個一起約一個妹子,在java裏面叫併發,高併發,妹子只有一個,完全不夠分;與之對應的解決辦法就是線程同步,線程同步的方式也很簡單,跟追妹子一樣,你在給妹子發預約短信的時候,順便跟妹子說,我已經同時給另外9個漢子說了,今晚你同意跟我去看電影了,然後,於此同時告訴另外9個漢子,妹子已經同意跟你出去看電影了,你們該幹嘛幹嘛去;(切記,理論歸理論,這樣操作有風險,萬一被打死,本人概不負責

     操作有點騷,理是這個理,線程同步的目的也是告訴其他線程,這塊代碼,這個方法,這個變量,我在用,你們該幹嘛幹嘛去,要用可以,得等我用完,大概就這個理;

 

五、線程死鎖

      多線程以及多進程改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題——死鎖。所謂死鎖是指多個線程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進。多個漢子追一個妹子好處也有,壞處也多,比如剛纔那個看電影的事,萬一10個人都死磕,就是誰也不讓,就堵在妹子家門口,咋辦???死鎖啊兄弟,這就是死鎖,誰也不妥協,誰也不讓,妹子出不來,電影沒法看;記住了,死鎖很可怕,追妹子儘量追沒人追的,

 


六、好了,第五,第六暫時理解概念就好,後面會根據項目來實際講解,線程內容灰常多,打字手類,還有看不太明白的, 看下面哈;

歡迎加入途碼技術學習交流二羣,羣聊號碼:322394766

微信公衆號:

     

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章