氟塑料離心泵www.buybeng.com

          jquery教程http://www.software8.co/wzjs/jquery/

          Java多線程中Sleep與Wait的區(qū)別

          Java中的多線程是一種搶占式的機(jī)制,而不是分時機(jī)制。搶占式的機(jī)制是有多個線程處于可運(yùn)行狀態(tài),但是只有一個線程在運(yùn)行。

          共同點(diǎn):

          1. 他們都是在多線程的環(huán)境下,都可以在程序的調(diào)用處阻塞指定的毫秒數(shù),并返回。

          2. wait()和sleep()都可以通過interrupt()方法 打斷線程的暫停狀態(tài) ,從而使線程立刻拋出InterruptedException。

             如果線程A希望立即結(jié)束線程B,則可以對線程B對應(yīng)的Thread實(shí)例調(diào)用interrupt方法。如果此刻線程B正在wait/sleep/join,則線程B會立刻拋出InterruptedException,在catch() {} 中直接return即可安全地結(jié)束線程。

             需要注意的是,InterruptedException是線程自己從內(nèi)部拋出的,并不是interrupt()方法拋出的。對某一線程調(diào)用 interrupt()時,如果該線程正在執(zhí)行普通的代碼,那么該線程根本就不會拋出InterruptedException。但是,一旦該線程進(jìn)入到 wait()/sleep()/join()后,就會立刻拋出InterruptedException 。

          不同點(diǎn):

          1. Thread類的方法:sleep(),yield()等

            Object的方法:wait()和notify()等

          2. 每個對象都有一個鎖來控制同步訪問。Synchronized關(guān)鍵字可以和對象的鎖交互,來實(shí)現(xiàn)線程的同步。

            sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。

          3. wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用

          4. sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常  

          線程的調(diào)度

              線程調(diào)度器按線程的優(yōu)先級高低選擇高優(yōu)先級線程(進(jìn)入運(yùn)行中狀態(tài))執(zhí)行,同時線程調(diào)度是搶先式調(diào)度,即如果在當(dāng)前線程執(zhí)行過程中,一個更高優(yōu)先級的線程進(jìn)入可運(yùn)行狀態(tài),則這個線程立即被調(diào)度執(zhí)行。

          搶先式調(diào)度又分為:時間片方式和獨(dú)占方式。在時間片方式下,當(dāng)前活動線程執(zhí)行完當(dāng)前時間片后,如果有其他處于就緒狀態(tài)的相同優(yōu)先級的線程,系統(tǒng)會將執(zhí)行權(quán)交給其他就緒態(tài)的同優(yōu)先級線程;當(dāng)前活動線程轉(zhuǎn)入等待執(zhí)行隊(duì)列,等待下一個時間片的調(diào)度。

          在獨(dú)占方式下,當(dāng)前活動線程一旦獲得執(zhí)行權(quán),將一直執(zhí)行下去,直到執(zhí)行完畢或由于某種原因主動放棄CPU,或者是有一高優(yōu)先級的線程處于就緒狀態(tài)。

          舉例說明

                  首先我想說的是:在多線程編程中,經(jīng)常會使用sleep與wait操作,我們理解sleep與wait的最大區(qū)別是sleep等待是不會釋放當(dāng)前鎖,而wait則反之。我今天想到一個現(xiàn)實(shí)例子來比較這兩者的區(qū)別。 
                  我以去火車站買票的例子來說明。我們?nèi)セ疖囌举I票,當(dāng)站到售票窗口前要告訴售票員需要到哪里的票,什么時候發(fā)車的,售票員就通過電腦去給我們打印票,這個時候我們就得等待。如果我們用sleep模式,就得一直站在那里等,直到售票員給我們票;如果用wait模式,這個時候就離開我們所站的位置,后面的票友就可能站到我當(dāng)前的位置(窗口前),我們要取票的話,就得重新排在隊(duì)伍后面去取票。

          posted on 2012-11-06 15:41 你爸是李剛 閱讀(1567) 評論(1)  編輯  收藏

          評論

          # re: Java多線程中Sleep與Wait的區(qū)別 2013-10-30 20:48 田西超

          樓主的例子很形象,小弟不才,補(bǔ)充一下:關(guān)于sleep模式,我們?nèi)ベI票的時候,售票員通過電腦打印票,但是(假設(shè))打印票的時間較長,我們就需要等待,但是這個時候,售票員可以給后面的人售票,我們則站在一旁等候,票出來后我們便立馬取票。  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          技術(shù)網(wǎng)站

          行業(yè)網(wǎng)站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          站長網(wǎng) 氟塑料離心泵 注塑機(jī) 液晶廣告機(jī)
          主站蜘蛛池模板: 成武县| 昭苏县| 河池市| 交口县| 肃北| 鹤峰县| 旬邑县| 玛曲县| 榕江县| 阿拉善盟| 东平县| 修武县| 麻城市| 雅安市| 惠来县| 武夷山市| 朝阳县| 岚皋县| 华坪县| 双柏县| 平湖市| 左云县| 类乌齐县| 兴山县| 调兵山市| 澜沧| 泗水县| 左云县| 威海市| 西吉县| 龙岩市| 璧山县| 辽宁省| 高雄市| 句容市| 鱼台县| 驻马店市| 浏阳市| 沂源县| 浦北县| 隆回县|