欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

java中sleep()和yield()有哪些區(qū)別

這篇文章主要介紹了java中sleep()和yield()有哪些區(qū)別,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

十載建站經(jīng)驗, 成都網(wǎng)站設計、成都網(wǎng)站制作客戶的見證與正確選擇。創(chuàng)新互聯(lián)提供完善的營銷型網(wǎng)頁建站明細報價表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。

2.4 sleep()和yield()的區(qū)別
1) sleep()使當前線程進入停滯狀態(tài),所以執(zhí)行sleep()的線程在指定的時間內(nèi)肯定不會執(zhí)行;yield()只是使當前線程重新回到可執(zhí)行狀態(tài),所以執(zhí)行yield()的線程有可能在進入到可執(zhí)行狀態(tài)后馬上又被執(zhí)行。
2) sleep()可使優(yōu)先級低的線程得到執(zhí)行的機會,當然也可以讓同優(yōu)先級和高優(yōu)先級的線程有執(zhí)行的機會;yield()只能使同優(yōu)先級的線程有執(zhí)行的機會。
例15:
class TestThreadMethod extends Thread{
public static int shareVar = 0;
public TestThreadMethod(String name){
super(name);
}
public void run(){
for(int i=0; i<4; i++){
System.out.print(Thread.currentThread().getName());
System.out.println(" : " + i);
//Thread.yield(); (1)
/* (2) */
try{
Thread.sleep(3000);
}
catch(InterruptedException e){
System.out.println("Interrupted");
}

}
}
}
public class TestThread{
public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
TestThreadMethod t2 = new TestThreadMethod("t2");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}
運行結(jié)果為:
t1 : 0
t1 : 1
t2 : 0
t1 : 2
t2 : 1
t1 : 3
t2 : 2
t2 : 3
由結(jié)果可見,通過sleep()可使優(yōu)先級較低的線程有執(zhí)行的機會。注釋掉代碼(2),并去掉代碼(1)的注釋,結(jié)果為:
t1 : 0
t1 : 1
t1 : 2
t1 : 3
t2 : 0
t2 : 1
t2 : 2
t2 : 3
可見,調(diào)用yield(),不同優(yōu)先級的線程永遠不會得到執(zhí)行機會。
2.5 join()
使調(diào)用join()的線程執(zhí)行完畢后才能執(zhí)行其它線程,在一定意義上,它可以實現(xiàn)同步的功能。
例16:
class TestThreadMethod extends Thread{
public static int shareVar = 0;
public TestThreadMethod(String name){
super(name);
}
public void run(){
for(int i=0; i<4; i++){
System.out.println(" " + i);
try{
Thread.sleep(3000);
}
catch(InterruptedException e){
System.out.println("Interrupted");
}
}
}
}
public class TestThread{
public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
t1.start();
try{
t1.join();
}
catch(InterruptedException e){}
t1.start();
}
}
運行結(jié)果為:
0
1
2
3
0
1
2
3


3. class Object下常用的線程函數(shù)
wait()、notify()和notifyAll()這三個函數(shù)由java.lang.Object類提供,用于協(xié)調(diào)多個線程對共享數(shù)據(jù)的存取。
3.1 wait()、notify()和notifyAll()
1) wait()函數(shù)有兩種形式:第一種形式接受一個毫秒值,用于在指定時間長度內(nèi)暫停線程,使線程進入停滯狀態(tài)。第二種形式為不帶參數(shù),代表waite()在notify()或notifyAll()之前會持續(xù)停滯。
2) 當對一個對象執(zhí)行notify()時,會從線程等待池中移走該任意一個線程,并把它放到鎖標志等待池中;當對一個對象執(zhí)行notifyAll()時,會從線程等待池中移走所有該對象的所有線程,并把它們放到鎖標志等待池中。
3) 當調(diào)用wait()后,線程會釋放掉它所占有的“鎖標志”,從而使線程所在對象中的其它synchronized數(shù)據(jù)可被別的線程使用。
例17:
下面,我們將對例11中的例子進行修改
class TestThreadMethod extends Thread{
public static int shareVar = 0;
public TestThreadMethod(String name){
super(name);
}
public synchronized void run(){
if(shareVar==0){
for(int i=0; i<10; i++){
shareVar++;
if(shareVar==5){
try{
this.wait(); //(4)
}
catch(InterruptedException e){}
}
}
}
if(shareVar!=0){
System.out.print(Thread.currentThread().getName());
System.out.println(" shareVar = " + shareVar);
this.notify(); //(5)
}
}
}
public class TestThread{
public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
TestThreadMethod t2 = new TestThreadMethod("t2");
t1.start(); //(1)
//t1.start();?。?)
t2.start(); //(3)
}
}
運行結(jié)果為:
t2 shareVar = 5
因為t1和t2是兩個不同對象,所以線程t2調(diào)用代碼(5)不能喚起線程t1。如果去掉代碼(2)的注釋,并注釋掉代碼(3),結(jié)果為:
t1 shareVar = 5
t1 shareVar = 10
這是因為,當代碼(1)的線程執(zhí)行到代碼(4)時,它進入停滯狀態(tài),并釋放對象的鎖狀態(tài)。接著,代碼(2)的線程執(zhí)行run(),由于此時 shareVar值為5,所以執(zhí)行打印語句并調(diào)用代碼(5)使代碼(1)的線程進入可執(zhí)行狀態(tài),然后代碼(2)的線程結(jié)束。當代碼(1)的線程重新執(zhí)行后,它接著執(zhí)行for()循環(huán)一直到shareVar=10,然后打印shareVar。
3.2 wait()、notify()和synchronized
waite()和notify()因為會對對象的“鎖標志”進行操作,所以它們必須在synchronized函數(shù)或synchronized  block中進行調(diào)用。如果在non-synchronized函數(shù)或non-synchronized block中進行調(diào)用,雖然能編譯通過,但在運行時會發(fā)生IllegalMonitorStateException的異常。
例18:
class TestThreadMethod extends Thread{
public int shareVar = 0;
public TestThreadMethod(String name){
super(name);
new Notifier(this);
}
public synchronized void run(){
if(shareVar==0){
for(int i=0; i<5; i++){
shareVar++;
System.out.println("i = " + shareVar);
try{
System.out.println("wait......");
this.wait();
}
catch(InterruptedException e){}
}
}
}
}
class Notifier extends Thread{
private TestThreadMethod ttm;
Notifier(TestThreadMethod t){
ttm = t;
start();
}
public void run(){
while(true){
try{
sleep(2000);
}
catch(InterruptedException e){}
/*1 要同步的不是當前對象的做法 */
synchronized(ttm){
System.out.println("notify......");
ttm.notify();
}
}
}
}
public class TestThread{
public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
t1.start();
}
}
運行結(jié)果為:
i = 1
wait......
notify......
i = 2
wait......
notify......
i = 3
wait......
notify......
i = 4
wait......
notify......
i = 5
wait......
notify......
4. wait()、notify()、notifyAll()和suspend()、resume()、sleep()的討論
4.1 這兩組函數(shù)的區(qū)別
1) wait()使當前線程進入停滯狀態(tài)時,還會釋放當前線程所占有的“鎖標志”,從而使線程對象中的synchronized資源可被對象中別的線程使用;而suspend()和sleep()使當前線程進入停滯狀態(tài)時不會釋放當前線程所占有的“鎖標志”。
2) 前一組函數(shù)必須在synchronized函數(shù)或synchronized block中調(diào)用,否則在運行時會產(chǎn)生錯誤;而后一組函數(shù)可以non-synchronized函數(shù)和synchronized block中調(diào)用。
4.2 這兩組函數(shù)的取舍
Java2已不建議使用后一組函數(shù)。因為在調(diào)用wait()時不會釋放當前線程所取得的“鎖標志”,這樣很容易造成“死鎖”。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java中sleep()和yield()有哪些區(qū)別”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

分享標題:java中sleep()和yield()有哪些區(qū)別
URL網(wǎng)址:http://aaarwkj.com/article40/pesjeo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站建設自適應網(wǎng)站、網(wǎng)站策劃、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
91麻豆国产在线视频| 成人深夜福利视频在线| 欧美日韩精品人妻一区| 精品国产亚洲av未满十八| 国产三级精品大乳人妇| 91欧美精品在线视频| 欧美日韩一级特黄大片| 国产精品福利午夜在线观看| 91欧美精品在线视频| 国产精致成人免费视频| 国产女人高潮流白丝视频| 亚洲一区二区三区免费在线看| 国自产偷精品不卡在线| 国产亚洲精品美女视频| 日韩中文字幕在线二区| 国产亚洲精品视频在线网| 午夜看片国产操黑丝91网| 人妻免费精品久久一区| 福利在线视频一区二区| 丁香婷婷综合激情五月| 久久这里有精品免费观看| 偷拍丝袜美腿亚洲超碰| a一级成人插少妇的逼| 午夜av一区二区三区| 日本av成人激情视频| 亚洲青涩精品一区二区三区| 日韩精品一二区电影| 婷婷人妻中文字幕在线| 日本在线免费观看91| 东京热加勒比在线播放| 日本人妻三级精品久久| 日本午夜福利视频在线观看| 成熟女人毛茸茸的视频| 日韩精品中文字幕欧美激情 | 国产情侣自拍视频在线观看| 国产精品大全中文字幕| 欧美日韩一级一区二区| 日韩av一区二区久久久| 国产精品国产三级农村av| 视频一区欧美日韩精品| 亚洲区一区二区三区亚洲|