[Java-多線程]“基礎(chǔ)篇”06之 線程讓步

概要
本章,會對Thread中的線程讓步方法yield()進行介紹街州。涉及到的內(nèi)容包括:

  1. yield()介紹
  2. yield()示例
  3. yield() 與 wait()的比較
    轉(zhuǎn)載請注明出處:http://www.cnblogs.com/skywang12345/p/3479243.html

1. yield()介紹
yield()的作用是讓步兼丰。它能讓當(dāng)前線程由“運行狀態(tài)”進入到“就緒狀態(tài)”,從而讓其它具有相同優(yōu)先級的等待線程獲取執(zhí)行權(quán)菇肃;但是地粪,并不能保證在當(dāng)前線程調(diào)用yield()之后,其它具有相同優(yōu)先級的線程就一定能獲得執(zhí)行權(quán)琐谤;也有可能是當(dāng)前線程又進入到“運行狀態(tài)”繼續(xù)運行蟆技!

2. yield()示例
下面,通過示例查看它的用法斗忌。

 1 // YieldTest.java的源碼 
2 class ThreadA extends Thread{ 
3 public ThreadA(String name){  
4 super(name);  
5  }  
6 public synchronized void run(){  
7 for(int i=0; i <10; i++){  
8 System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i);  
9 // i整除4時质礼,調(diào)用yield
10 if (i%4 == 0)
11  Thread.yield();
12  } 
13  } 
14 } 
15 
16 public class YieldTest{ 
17 public static void main(String[] args){ 
18 ThreadA t1 = new ThreadA("t1"); 
19 ThreadA t2 = new ThreadA("t2"); 
20  t1.start(); 
21  t2.start();
22  } 
23 }

(某一次的)運行結(jié)果:
t1 [5]:0
t2 [5]:0
t1 [5]:1
t1 [5]:2
t1 [5]:3
t1 [5]:4
t1 [5]:5
t1 [5]:6
t1 [5]:7
t1 [5]:8
t1 [5]:9
t2 [5]:1
t2 [5]:2
t2 [5]:3
t2 [5]:4
t2 [5]:5
t2 [5]:6
t2 [5]:7
t2 [5]:8
t2 [5]:9

結(jié)果說明
“線程t1”在能被4整數(shù)的時候,并沒有切換到“線程t2”织阳。這表明眶蕉,yield()雖然可以讓線程由“運行狀態(tài)”進入到“就緒狀態(tài)”;但是唧躲,它不一定會讓其它線程獲取CPU執(zhí)行權(quán)(即造挽,其它線程進入到“運行狀態(tài)”),即使這個“其它線程”與當(dāng)前調(diào)用yield()的線程具有相同的優(yōu)先級弄痹。

3. yield() 與 wait()的比較
我們知道饭入,wait()的作用是讓當(dāng)前線程由“運行狀態(tài)”進入“等待(阻塞)狀態(tài)”的同時,也會釋放同步鎖肛真。而yield()的作用是讓步谐丢,它也會讓當(dāng)前線程離開“運行狀態(tài)”。它們的區(qū)別是:
(01) wait()是讓線程由“運行狀態(tài)”進入到“等待(阻塞)狀態(tài)”,而不yield()是讓線程由“運行狀態(tài)”進入到“就緒狀態(tài)”乾忱。
(02) wait()是會線程釋放它所持有對象的同步鎖讥珍,而yield()方法不會釋放鎖。
下面通過示例演示yield()是不會釋放鎖的窄瘟。

 1 // YieldLockTest.java 的源碼 
2 public class YieldLockTest{  
3  
4 private static Object obj = new Object(); 
5  
6 public static void main(String[] args){  
7 ThreadA t1 = new ThreadA("t1");  
8 ThreadA t2 = new ThreadA("t2");  
9  t1.start(); 
10  t2.start();
11  } 
12 
13 static class ThreadA extends Thread{
14 public ThreadA(String name){ 
15 super(name); 
16  } 
17 public void run(){ 
18 // 獲取obj對象的同步鎖
19 synchronized (obj) {
20 for(int i=0; i <10; i++){ 
21 System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i); 
22 // i整除4時衷佃,調(diào)用yield
23 if (i%4 == 0)
24  Thread.yield();
25  }
26  }
27  } 
28  } 
29 }

(某一次)運行結(jié)果
t1 [5]:0
t1 [5]:1
t1 [5]:2
t1 [5]:3
t1 [5]:4
t1 [5]:5
t1 [5]:6
t1 [5]:7
t1 [5]:8
t1 [5]:9
t2 [5]:0
t2 [5]:1
t2 [5]:2
t2 [5]:3
t2 [5]:4
t2 [5]:5
t2 [5]:6
t2 [5]:7
t2 [5]:8
t2 [5]:9

結(jié)果說明
主線程main中啟動了兩個線程t1和t2。t1和t2在run()會引用同一個對象的同步鎖蹄葱,即synchronized(obj)纲酗。在t1運行過程中,雖然它會調(diào)用Thread.yield()新蟆;但是,t2是不會獲取cpu執(zhí)行權(quán)的右蕊。因為琼稻,t1并沒有釋放“obj所持有的同步鎖”!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饶囚,一起剝皮案震驚了整個濱河市帕翻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萝风,老刑警劉巖嘀掸,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異规惰,居然都是意外死亡睬塌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門歇万,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揩晴,“玉大人,你說我怎么就攤上這事贪磺×蚶迹” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵寒锚,是天一觀的道長劫映。 經(jīng)常有香客問我,道長刹前,這世上最難降的妖魔是什么泳赋? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任赚哗,我火速辦了婚禮流部,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扰法。我一直安慰自己轧飞,他們只是感情好衅鹿,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布撒踪。 她就那樣靜靜地躺著,像睡著了一般大渤。 火紅的嫁衣襯著肌膚如雪制妄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天泵三,我揣著相機與錄音耕捞,去河邊找鬼。 笑死烫幕,一個胖子當(dāng)著我的面吹牛俺抽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播较曼,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼磷斧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捷犹?” 一聲冷哼從身側(cè)響起弛饭,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萍歉,沒想到半個月后侣颂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡枪孩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年憔晒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔑舞。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡丛晌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斗幼,到底是詐尸還是另有隱情澎蛛,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布蜕窿,位于F島的核電站谋逻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏桐经。R本人自食惡果不足惜毁兆,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阴挣。 院中可真熱鬧气堕,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梅桩,卻和暖如春壹粟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宿百。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工趁仙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垦页。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓雀费,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痊焊。 傳聞我的和親對象是個殘疾皇子坐儿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容