一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - Java中sleep()與wait()的區別總結

Java中sleep()與wait()的區別總結

2020-09-29 10:52Hongten Java教程

因為最近學習時正好碰到這兩個方法,就查閱相關資料,并通過程序實現,進行區別總結一下,所以下面這篇文章主要給大家總結介紹了關于Java中sleep()與wait()區別的相關資料,需要的朋友可以參考,下面來一起看看吧。

前言

對于sleep()方法,我們首先要知道該方法是屬于Thread類中的。而wait()方法,則是屬于Object類中的。

sleep()方法導致了程序暫停執行指定的時間,讓出cpu該其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。

在調用sleep()方法的過程中,線程不會釋放對象鎖。

而當調用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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
 *
 */
package com.b510.test;
 
/**
 * java中的sleep()和wait()的區別
 * @author Hongten
 * @date 2013-12-10
 */
public class TestD {
 
 public static void main(String[] args) {
  new Thread(new Thread1()).start();
  try {
   Thread.sleep(5000);
  } catch (Exception e) {
   e.printStackTrace();
  }
  new Thread(new Thread2()).start();
 }
 
 private static class Thread1 implements Runnable{
  @Override
  public void run(){
   synchronized (TestD.class) {
   System.out.println("enter thread1...");
   System.out.println("thread1 is waiting...");
   try {
    //調用wait()方法,線程會放棄對象鎖,進入等待此對象的等待鎖定池
    TestD.class.wait();
   } catch (Exception e) {
    e.printStackTrace();
   }
   System.out.println("thread1 is going on ....");
   System.out.println("thread1 is over!!!");
   }
  }
 }
 
 private static class Thread2 implements Runnable{
  @Override
  public void run(){
   synchronized (TestD.class) {
    System.out.println("enter thread2....");
    System.out.println("thread2 is sleep....");
    //只有針對此對象調用notify()方法后本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態。
    TestD.class.notify();
    //==================
    //區別
    //如果我們把代碼:TestD.class.notify();給注釋掉,即TestD.class調用了wait()方法,但是沒有調用notify()
    //方法,則線程永遠處于掛起狀態。
    try {
     //sleep()方法導致了程序暫停執行指定的時間,讓出cpu該其他線程,
     //但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。
     //在調用sleep()方法的過程中,線程不會釋放對象鎖。
     Thread.sleep(5000);
    } catch (Exception e) {
     e.printStackTrace();
    }
    System.out.println("thread2 is going on....");
    System.out.println("thread2 is over!!!");
   }
  }
 }
}

運行效果:

?
1
2
3
4
5
6
7
8
enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!
thread1 is going on ....
thread1 is over!!!

如果注釋掉代碼:

?
1
TestD.class.notify();

運行效果:

?
1
2
3
4
5
6
enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!

且程序一直處于掛起狀態。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产最新精品视频 | 午夜国产在线 | 摸咪网在线影院在线观看 | dasd817黑人在线播放 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 国产99久久九九精品免费 | 四虎影视地址 | 日本三级在丈面前被耍了 | 亚洲波多野结衣日韩在线 | 99精品在线免费观看 | 亚洲干综合 | 日本精品久久久久中文字幕 1 | 国产婷婷综合丁香亚洲欧洲 | 亚洲gogo人体大胆西西安徽 | 欧美老人与小伙子性生交 | 午夜免费啪视频观看视频 | caonila国产在线观看 | 久久午夜夜伦痒痒想咳嗽P 久久无码AV亚洲精品色午夜麻豆 | 不卡日本 | 99re热| 亚洲第一二三四区 | 日本无遮挡吸乳视频看看 | 性吟网 | 国产成人综合网亚洲欧美在线 | 免费亚洲视频在线观看 | 亚洲色图图 | 无遮免费网站在线入口 | 桃乃木香在线 | 国产色婷婷亚洲 | 69日本人xxxx16—18 | 波多野结衣 在线 | 男人天堂日韩 | 青青久久精品国产免费看 | 亚洲人成在线播放 | 免费理伦片在线观看全网站 | 四虎国产精品免费入口 | 免费观看网站 | 成人1234 | 免费一级片在线观看 | 欧美理论片手机在线观看片免费 | 日本视频高清免费观看xxx |