激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - Java教程 - java 中線程等待與通知的實現

java 中線程等待與通知的實現

2021-01-10 11:15alwyq Java教程

這篇文章主要介紹了java 中線程等待與通知的實現的相關資料,希望通過本文能幫助到大家,讓大家掌握這樣的功能,需要的朋友可以參考下

java線程等待與通知的實現

前言:

關于等待/通知,要記住的關鍵點是:

必須從同步環境內調用wait()、notify()、notifyAll()方法。線程不能調用對象上等待或通知的方法,除非它擁有那個對象的鎖。

wait()、notify()、notifyAll()都是Object的實例方法。與每個對象具有鎖一樣,每個對象可以有一個線程列表,他們等待來自該信號(通知)。線程通過執行對象上的wait()方法獲得這個等待列表。從那時候起,它不再執行任何其他指令,直到調用對象的notify()方法為止。如果多個線程在同一個對象上等待,則將只選擇一個線程(不保證以何種順序)繼續執行。如果沒有線程等待,則不采取任何特殊操作。

 示例代碼:

?
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
27
package threadwait;
 
public class ThreadA extends Thread{
 
  public int num = 0;
 
  public void run(){
 
    synchronized (this){//在此類對象上實現同步,this指代當前對象
 
      for(int i = 0 ; i < 3 ; ++i)
 
       this.num+=i;
 
      notifyAll();//通知所有在這個對象上等待的線程開始執行,在這里就是通知TestNotify主線程開始執行
 
    }
 
  }
 
  public int getNum(){
 
    return this.num;
 
  }
 
}
?
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
27
28
29
30
31
32
33
package threadwait;
 
 
 
public class TestNotify{
 
  public static void main(String args[]){
 
    ThreadA threada = new ThreadA();
 
    threada.start();//threada線程有執行的資格,但是還沒有開始執行
 
    synchronized(threada){
 
      try{
 
       threada.wait();//主線程等待threada線程執行結束才開始執行
 
       //而且只有獲得了當前threada對象的鎖之后才能執行wait,就是說在同步域內才可以執行wait,執行wait后放棄對象鎖
 
      }catch(InterruptedException e){
 
       e.printStackTrace();
 
      }
 
    }
 
    System.out.println(threada.getNum());
 
  }
 
}

同步可以是在class級別上的,synchronized(A.class),也可以是在對象級別上的synchronized(this),可以是靜態同步方法,static synchronized ,靜態同步方法是在class級別上的,非靜態同步方法是在類對象級別上的,一個類對象只有一個鎖,只有獲得了該鎖才可以對他執行wait操作,后釋放掉該鎖。

更進一步的實例代碼如下:

?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package threadwait;
 
 
 
public class ThreadA extends Thread{
 
  public int num = 0;
 
  public void run(){
 
    synchronized (this){//在此類對象上實現同步,this指代當前對象
 
      for(int i = 0 ; i < 3 ; ++i)
 
       this.num+=i;
 
      try{
 
       Thread.sleep(500);//如果ThreadB的三個示例線程在還沒有進入等待狀態之前就受到了notifyall的信號
 
       //那將會發生嚴重后果,因為調用notifyall的線程只可以調用一次notifyall,那造成等待的線程將永遠等待下去
 
       //所以在此處讓它睡一小會,讓其他線程有時間進入等待狀態。
 
       //不然會收到
 
      }catch(InterruptedException e){
 
       e.printStackTrace();
 
      }
 
      notifyAll();//通知所有在這個對象上等待的線程開始執行,在這里就是通知TestNotify主線程開始執行
 
    }
 
//   notifyAll();
 
  }
 
  public int getNum(){
 
    return this.num;
 
  }
 
}
?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
package threadwait;
 
 
 
public class ThreadB extends Thread{
 
  private ThreadA threada;
 
  public ThreadB(ThreadA ta){
 
    this.threada = ta;
 
  }
 
  public void run(){
 
    System.out.println(Thread.currentThread().getName()+" is waitting.");
 
    synchronized(threada){
 
      try{
 
       threada.wait();
 
      }catch(InterruptedException e){
 
       e.printStackTrace();
 
      }
 
      System.out.println(Thread.currentThread().getName()+" "+this.threada.getNum());
 
    }
 
   
 
  }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package threadwait;
 
 
 
public class TestNotify{
 
  public static void main(String args[]){
 
    ThreadA threada = new ThreadA();
 
    new ThreadB(threada).start();
 
    new ThreadB(threada).start();
 
    new ThreadB(threada).start();
 
    threada.start();
 
  }
 
}

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/alwyq/article/details/36033719

延伸 · 閱讀

精彩推薦
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
主站蜘蛛池模板: 中文字幕在线观看1 | 欧美性生活久久 | 欧美一级爱操视频 | 看黄在线 | 国产精品三级a三级三级午夜 | 蜜桃91丨九色丨蝌蚪91桃色 | 一级全毛片 | 久章草影院 | 91看片. | 精品国产一区二区三区四区阿崩 | 国产一区二区成人在线 | xxx日本视频 | 在线播放免费av | 婷婷一区二区三区 | 成人在线观看免费爱爱 | 国产精品午夜一区 | 久久久久亚洲美女啪啪 | 一区二区三区日韩在线 | 毛片在线免费观看完整版 | 欧洲成人免费视频 | 正在播放91视频 | 中文字幕精品亚洲 | 国产精品久久久久久模特 | 免费视频xxxx | 爱操av| 蜜桃精品视频 | 五月天影院,久久综合, | 日韩高清电影 | 2级毛片| 女人裸体让男人桶全过程 | jizzjizzxxxxx| 欧美黄色大片免费观看 | 999精品久久久 | 国产日韩一区二区三区在线观看 | 亚洲午夜影院在线观看 | chinesexxxx刘婷hd 黄色片网站在线免费观看 国产免费高清在线 | 成人一区二区在线观看视频 | h色视频在线观看 | 国产乱一区二区三区视频 | 久久福利精品 | www国产成人免费观看视频,深夜成人网 |