国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java線程讓步_動力節點Java學院整理

Java線程讓步_動力節點Java學院整理

2020-10-28 15:10動力節點 Java教程

yield()的作用是讓步。它能讓當前線程由“運行狀態”進入到“就緒狀態”,從而讓其它具有相同優先級的等待線程獲取執行權。下面通過本文給大家介紹Java線程讓步的相關知識,需要的朋友參考下吧

yield()介紹

yield()的作用是讓步。它能讓當前線程由“運行狀態”進入到“就緒狀態”,從而讓其它具有相同優先級的等待線程獲取執行權;但是,并不能保證在當前線程調用yield()之后,其它具有相同優先級的線程就一定能獲得執行權;也有可能是當前線程又進入到“運行狀態”繼續運行! 

yield()示例

下面,通過示例查看它的用法。 

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

(某一次的)運行結果: 

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 

結果說明:

“線程t1”在能被4整數的時候,并沒有切換到“線程t2”。這表明,yield()雖然可以讓線程由“運行狀態”進入到“就緒狀態”;但是,它不一定會讓其它線程獲取CPU執行權(即,其它線程進入到“運行狀態”),即使這個“其它線程”與當前調用yield()的線程具有相同的優先級。 

yield() 與 wait()的比較

我們知道,wait()的作用是讓當前線程由“運行狀態”進入“等待(阻塞)狀態”的同時,也會釋放同步鎖。而yield()的作用是讓步,它也會讓當前線程離開“運行狀態”。它們的區別是:

(01) wait()是讓線程由“運行狀態”進入到“等待(阻塞)狀態”,而不yield()是讓線程由“運行狀態”進入到“就緒狀態”。

(02) wait()是會線程釋放它所持有對象的同步鎖,而yield()方法不會釋放鎖。

下面通過示例演示yield()是不會釋放鎖的。 

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

(某一次)運行結果: 

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 

結果說明:

主線程main中啟動了兩個線程t1和t2。t1和t2在run()會引用同一個對象的同步鎖,即synchronized(obj)。在t1運行過程中,雖然它會調用Thread.yield();但是,t2是不會獲取cpu執行權的。因為,t1并沒有釋放“obj所持有的同步鎖”

以上所述是小編給大家介紹的Java線程讓步_動力節點Java學院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 在线观看中文字幕亚洲 | 国产精品久久久久久中文字 | 成人午夜在线播放 | 欧美亚洲视频在线观看 | 亚洲一区二区三区在线播放 | 国产成人一区二区啪在线观看 | 91久久国产| 成人高清在线 | 色综合久久88色综合天天 | 国产乱叫456| 啪一啪操一操 | 亚洲国产一区二区三区四区 | 日韩久色| 国产在线精品一区二区 | 日产一区二区 | 国产午夜精品一区二区三区嫩草 | 久久老妇| 黄色电影在线免费观看 | 午夜电影网址 | 欧美成人专区 | 欧美精品1| 国产资源大全 | 视频黄色免费 | 久草免费在线视频 | 亚洲精品综合 | 国产成人精品免费视频大全最热 | 亚洲午夜免费视频 | 精品视频一区二区 | 国产成人av在线播放 | 亚洲国产精品一区二区三区 | 久久久国产精品久久久 | 欧美综合一区二区三区 | 午夜在线观看影院 | 国产精久久久 | 波多野结衣一区二区三区 | 久久久久网站 | 亚洲国产视频一区二区 | 日韩1区2区| 久久久国产一区二区三区四区小说 | 午夜资源| 久久精品国产清自在天天线 |