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

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九色国产在线视频| 日本韩国欧美在线一区| 亚洲最色最黄大片在线视频| 日韩在线视频精品一区| 人妻激情偷乱视91九色| 四虎经典视频在线播放| 亚洲欧美日韩午夜在线| 国产精品一久久香蕉产线看 | 熟妇人妻精品一区二区三区颏| 操国产熟女大白屁股| 一级黄片国产精品久久| 免费在线观看一区二区三区视频| 少妇诱惑一区二区三区| 久久亚洲精品中文字幕一| 亚洲黄片在线免费播放观看| 日本高清不卡免费在线观看视频一二三区| 日韩一区欧美中文字幕| 亚洲国产精品自拍第一页| 久久精品国语少妇对白| 午夜国产精品福利一二| 日韩高清精品一区二区| 久久综合视频大片视频| 成人黄片在线免费播放| 日本精品人妻一区二区三区蜜桃| 加勒比久久精品网址系列| 国产欧美日韩精品一区| 欧美伊香蕉久久综合网99| 午夜免费成人在线视频| 日韩一区中文字幕久久| 日韩一区二区三区av在线| 日本人妻免费在线观看| 久久成人av一区二区三区| 免费女同一区二区三区| 91午夜福利视频免费播放| 亚洲精品有码在线观看| 日韩精品一区二区毛片| 18禁成年大片免费网站| 精品国产第一区二区三区| 免费午夜福利一区二区| 五月婷婷六月丁香俺来也|