日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java線程中yield與join方法的區別

瀏覽:22日期:2022-09-06 09:17:38

長期以來,多線程問題頗為受到面試官的青睞。雖然我個人認為我們當中很少有人能真正獲得機會開發復雜的多線程應用(在過去的七年中,我得到了一個機會),但是理解多線程對增加你的信心很有用。之前,我討論了一個wait()和sleep()方法區別的問題,這一次,我將會討論join()和yield()方法的區別。坦白的說,實際上我并沒有用過其中任何一個方法,所以,如果你感覺有不恰當的地方,請提出討論。

Java線程調度的一點背景

在各種各樣的線程中,Java虛擬機必須實現一個有優先權的、基于優先級的調度程序。這意味著Java程序中的每一個線程被分配到一定的優先權,使用定義好的范圍內的一個正整數表示。優先級可以被開發者改變。即使線程已經運行了一定時間,Java虛擬機也不會改變其優先級

優先級的值很重要,因為Java虛擬機和下層的操作系統之間的約定是操作系統必須選擇有最高優先權的Java線程運行。所以我們說Java實現了一個基于優先權的調度程序。該調度程序使用一種有優先權的方式實現,這意味著當一個有更高優先權的線程到來時,無論低優先級的線程是否在運行,都會中斷(搶占)它。這個約定對于操作系統來說并不總是這樣,這意味著操作系統有時可能會選擇運行一個更低優先級的線程。(我憎恨多線程的這一點,因為這不能保證任何事情)

注意Java并不限定線程是以時間片運行,但是大多數操作系統卻有這樣的要求。在術語中經常引起混淆:搶占經常與時間片混淆。事實上,搶占意味著只有擁有高優先級的線程可以優先于低優先級的線程執行,但是當線程擁有相同優先級的時候,他們不能相互搶占。它們通常受時間片管制,但這并不是Java的要求。

理解線程的優先權

接下來,理解線程優先級是多線程學習很重要的一步,尤其是了解yield()函數的工作過程。

記住當線程的優先級沒有指定時,所有線程都攜帶普通優先級。優先級可以用從1到10的范圍指定。10表示最高優先級,1表示最低優先級,5是普通優先級。記住優先級最高的線程在執行時被給予優先。但是不能保證線程在啟動時就進入運行狀態。與在線程池中等待運行機會的線程相比,當前正在運行的線程可能總是擁有更高的優先級。由調度程序決定哪一個線程被執行。t.setPriority()用來設定線程的優先級。記住在線程開始方法被調用之前,線程的優先級應該被設定。你可以使用常量,如MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY來設定優先級

現在,當我們對線程調度和線程優先級有一定理解后,讓我們進入主題。

yield()方法

理論上,yield意味著放手,放棄,投降。一個調用yield()方法的線程告訴虛擬機它樂意讓其他線程占用自己的位置。這表明該線程沒有在做一些緊急的事情。注意,這僅是一個暗示,并不能保證不會產生任何影響。

在Thread.java中yield()定義如下:

/** * A hint to the scheduler that the current thread is willing to yield its current use of a processor. The scheduler is free to ignore * this hint. Yield is a heuristic attempt to improve relative progression between threads that would otherwise over-utilize a CPU. * Its use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect. */public static native void yield();

讓我們列舉一下關于以上定義重要的幾點:

Yield是一個靜態的原生(native)方法Yield告訴當前正在執行的線程把運行機會交給線程池中擁有相同優先級的線程。Yield不能保證使得當前正在運行的線程迅速轉換到可運行的狀態它僅能使一個線程從運行狀態轉到可運行狀態,而不是等待或阻塞狀態yield()方法使用示例

在下面的示例程序中,我隨意的創建了名為生產者和消費者的兩個線程。生產者設定為最小優先級,消費者設定為最高優先級。在Thread.yield()注釋和非注釋的情況下我將分別運行該程序。沒有調用yield()方法時,雖然輸出有時改變,但是通常消費者行先打印出來,然后事生產者。

調用yield()方法時,兩個線程依次打印,然后將執行機會交給對方,一直這樣進行下去。

package test.core.threads;public class YieldExample{ public static void main(String[] args) { Thread producer = new Producer(); Thread consumer = new Consumer(); producer.setPriority(Thread.MIN_PRIORITY); //Min Priority consumer.setPriority(Thread.MAX_PRIORITY); //Max Priority producer.start(); consumer.start(); }}class Producer extends Thread{ public void run() { for (int i = 0; i < 5; i++) { System.out.println('I am Producer : Produced Item ' + i); Thread.yield(); } }}class Consumer extends Thread{ public void run() { for (int i = 0; i < 5; i++) { System.out.println('I am Consumer : Consumed Item ' + i); Thread.yield(); } }}上述程序在沒有調用yield()方法情況下的輸出:

I am Consumer : Consumed Item 0 I am Consumer : Consumed Item 1 I am Consumer : Consumed Item 2 I am Consumer : Consumed Item 3 I am Consumer : Consumed Item 4 I am Producer : Produced Item 0 I am Producer : Produced Item 1 I am Producer : Produced Item 2 I am Producer : Produced Item 3 I am Producer : Produced Item 4上述程序在調用yield()方法情況下的輸出:

I am Producer : Produced Item 0 I am Consumer : Consumed Item 0 I am Producer : Produced Item 1 I am Consumer : Consumed Item 1 I am Producer : Produced Item 2 I am Consumer : Consumed Item 2 I am Producer : Produced Item 3 I am Consumer : Consumed Item 3 I am Producer : Produced Item 4 I am Consumer : Consumed Item 4join()方法

線程實例的方法join()方法可以使得在另一個線程的執行結束后再開始執行這個線程。如果join()方法被在一個線程實例上調用,當前運行著的線程將阻塞直到線程實例完成了執行。

//Waits for this thread to die.public final void join() throws InterruptedException

在join()方法內設定超時,使得join()方法的影響在特定超時后無效。當超時時,主方法和任務線程申請運行的時候是平等的。然而,當涉及sleep時,join()方法依靠操作系統計時,所以你不應該假定join()方法將會等待你指定的時間。

像sleep,join通過拋出InterruptedException對中斷做出回應。

join()方法使用示例

package test.core.threads;public class JoinExample{ public static void main(String[] args) throws InterruptedException { Thread t = new Thread(new Runnable() { public void run() { System.out.println('First task started'); System.out.println('Sleeping for 2 seconds'); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('First task completed'); } }); Thread t1 = new Thread(new Runnable() { public void run() { System.out.println('Second task completed'); } }); t.start(); // Line 15 t.join(); // Line 16 t1.start(); }}Output:First task startedSleeping for 2 secondsFirst task completedSecond task completed

這是一些很小卻很重要的概念。在評論部分讓我知道你的想法。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久亚洲精品伦理| 国产色播av在线| 福利一区视频| 日本久久一区| av亚洲一区二区三区| 久久国产视频网| 亚洲精选久久| 欧美一级专区| 国产视频一区在线观看一区免费| 成人亚洲欧美| 日本午夜精品| 国产传媒在线| 一二三区精品| 国产福利一区二区三区在线播放| 美女毛片一区二区三区四区最新中文字幕亚洲 | 精品视频亚洲| 欧美亚洲三区| 欧美性www| 日韩av一区二区三区四区| 在线免费观看亚洲| 欧美中文字幕| 久久国产精品亚洲77777| 亚洲91网站| 在线综合亚洲| 国产精品欧美日韩一区| 麻豆精品在线视频| 国产精品视频一区视频二区| 蜜臀av免费一区二区三区| 日韩一二三区在线观看| 久久男人天堂| 西西人体一区二区| 欧美日韩一区二区三区视频播放| 国产精品久久久久久久久久久久久久久 | 国产精品网站在线看| 黄色亚洲大片免费在线观看| 亚洲综合不卡| 国产精品一区二区三区四区在线观看| 视频在线观看国产精品| 日韩一区二区三区精品| 久久永久免费| 午夜久久tv| 国产精品一区毛片| 日本va欧美va精品| 麻豆一区二区三| 国产精品一二| 中文一区一区三区高中清不卡免费| 国产乱子精品一区二区在线观看| 亚洲精品乱码| 久久av影院| 久久精品国内一区二区三区水蜜桃| 精品久久电影| 亚洲欧洲一区| 国产精品毛片| 国产精品夜夜夜| 欧美日韩一区自拍| 噜噜噜久久亚洲精品国产品小说| 成人日韩在线| 在线精品一区| 岛国av在线播放| 亚洲免费毛片| 成人羞羞视频在线看网址| 亚洲另类黄色| 99精品国产一区二区三区| 日韩高清不卡在线| 91欧美极品| 九色porny丨国产首页在线| 91精品福利观看| 激情五月综合网| 国产一区二区三区视频在线| 男女性色大片免费观看一区二区| 日韩一区精品字幕| 精品国产精品国产偷麻豆| 石原莉奈在线亚洲三区| 91亚洲国产成人久久精品| 亚洲欧洲国产精品一区| 国产麻豆久久| 麻豆91精品视频| 视频精品一区二区| 91亚洲人成网污www| 日本视频一区二区| 在线一区免费| 99久久激情| 日韩不卡一二三区| 国内亚洲精品| 韩国精品主播一区二区在线观看 | 99精品电影| 亚洲成人精选| 一区二区三区四区精品视频| 亚洲一区免费| 蜜桃视频欧美| 视频一区二区三区在线| 国产精品网址| 日韩一区亚洲二区| 国产精品社区| 亚洲欧美网站| 久久久久亚洲精品中文字幕| 日韩av二区| 久久国产尿小便嘘嘘| 波多视频一区| 中文亚洲免费| 久久成人福利| 欧美一区二区三区久久| 综合一区av| 免费在线观看日韩欧美| 色在线中文字幕| 国产伦理久久久久久妇女| 日韩高清欧美激情| 影音先锋久久精品| 视频一区二区不卡| 中文字幕日韩亚洲| 亚洲一级黄色| 电影天堂国产精品| 日韩av二区| 久久久久九九精品影院| 国产精品美女在线观看直播| 日韩福利视频网| 香蕉久久一区| 亚洲精品成人一区| 日本视频一区二区| 成人看片网站| 亚洲精华国产欧美| 欧美成人国产| 香蕉久久夜色精品国产| 蜜桃av一区| 日本大胆欧美人术艺术动态| 精品亚洲精品| 久久精品国产成人一区二区三区| 色88888久久久久久影院| 高清一区二区三区av| 色黄视频在线观看| 999精品色在线播放| 欧美特黄一区| 成年男女免费视频网站不卡| 成年男女免费视频网站不卡| 欧美香蕉视频| 日韩在线短视频| 宅男在线一区| 亚洲三级av| 国产精品66| 狠狠躁少妇一区二区三区| 久久婷婷一区| 妖精视频成人观看www| 亚洲精品影视| 久久美女精品| 999在线观看精品免费不卡网站| 国产精品国产一区| 日韩欧美三级| 免费在线观看视频一区| 欧美日韩一区二区三区不卡视频 | 久久久久久色| 日韩美女精品| 久久免费福利| 久久婷婷丁香| 亚洲综合福利| 精品视频自拍| 999精品一区| 亚洲人成网77777色在线播放| 日韩午夜电影| 亚洲综合图色| 麻豆传媒一区二区三区| 亚洲va中文在线播放免费| 欧美精品二区| 97精品一区| 久久福利影视| 国产精品探花在线观看| 久久九九国产| 婷婷精品在线观看| 国产a久久精品一区二区三区| 国产精品s色| 日韩深夜视频| 亚洲精一区二区三区| 亚洲一区国产| 国产精品香蕉| 国产美女视频一区二区| 成人精品视频| 久久午夜精品一区二区| 久久中文字幕一区二区三区| 国产毛片一区二区三区| 不卡福利视频| 中文字幕一区二区三区日韩精品 | 日韩av二区在线播放| 国产专区精品| 三级欧美在线一区| 蜜臀久久久99精品久久久久久| 91精品亚洲| 亚洲ab电影| 日韩毛片在线| 国产欧美大片| 亚洲精品888| 国产精品115| 黄色成人精品网站| 麻豆成人av在线| 日韩专区一卡二卡| 特黄毛片在线观看| 91免费精品国偷自产在线在线| 欧美日韩精品一区二区三区视频 | 日本精品在线播放| 成人羞羞视频播放网站| 国产欧美日韩视频在线| 亚洲欧美久久久|