av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

java sleep()和wait()的區別點總結

瀏覽:2日期:2022-08-13 13:49:00
1、區別說明

wait()是Object的方法,sleep()是Thread的方法。

wait()必須采用同步方法,不需要sleep()方法。

線程在同步方法中執行sleep()方法,不釋放monitor鎖,wait()方法釋放monitor鎖。

短暫休眠后,sleep()方法會主動退出阻塞,而wait()方法需要在沒有指定wait時間的情況下被其他線程中斷才能退出阻塞。

2、實例

import java.text.SimpleDateFormat;import java.util.Date;public class TestSleepAndWait {public static void main(String[] args) {new Thread1().start();try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}new Thread2().start();}}class Thread1 extends Thread{private void sout(String s){System.out.println(s+' '+new SimpleDateFormat('HH:mm:ss:SS').format(new Date()));}@Overridepublic void run() {sout('enter Thread1.run');synchronized (TestSleepAndWait.class){//wait只能在同步代碼塊或者同步方法中使用sout('Thread1 is going to wait');try {TestSleepAndWait.class.wait(); // 這里只能使用持有鎖TestSleepAndWait.class.wait(),使用其他對象則報錯java.lang.IllegalMonitorStateException} catch (InterruptedException e) {e.printStackTrace();}sout('after waiting, thread1 is going on');sout('thread1 is over');}}}class Thread2 extends Thread{private void sout(String s){System.out.println(s+' '+new SimpleDateFormat('HH:mm:ss:SS').format(new Date()));}@Overridepublic void run() {sout('enter Thread2.run');synchronized (TestSleepAndWait.class){//wait只能在同步代碼塊或者同步方法中使用sout('Thread2 is going to notify');TestSleepAndWait.class.notify(); 這里只能使用持有鎖TestSleepAndWait.classsout('thread2 is going to sleep 10ms');try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}sout('after sleeping, thread2 is going on');sout('thread2 is over');}}}

內容擴展:

/** * */package com.b510.test;/** * java中的sleep()和wait()的區別 * @author Hongten Java學習交流QQ群:589809992 我們一起學Java! * @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!!!'); } } }}

到此這篇關于java sleep()和wait()的區別點總結的文章就介紹到這了,更多相關java sleep()和wait()的區別內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲激情欧美 | 免费中文字幕 | 色影视| 欧美日韩成人在线 | 欧美一级做性受免费大片免费 | 欧美激情综合 | 在线观看国产黄色 | 日韩精品一区在线 | 欧美成人一区二区三区 | aaa黄色 | 九一九色国产 | 国产中文一区 | 女人av在线 | 国产日韩欧美视频 | 国产伦精品一区二区三区免费视频 | 欧美日韩国产一区 | 亚洲视频在线看 | 一级片黄色 | 欧美福利一区 | 久久精品免费看 | 午夜激情在线观看 | www.久草.com | 欧美精产国品一二三区 | a亚洲天堂| 久久久久九九九 | 综合久久99| 深夜福利视频在线观看 | 亚洲三级在线观看 | 国产在线一区二区 | 成人在线免费网站 | 免费福利在线观看 | 中文字幕在线观看亚洲 | 一区二区三区四区在线 | 在线观看日韩精品 | 国产91清纯白嫩初高中在线观看 | 亚洲一区二区三区中文字幕 | 成年人免费在线视频 | 国产在线视频一区二区 | 干干干操操操 | 青青草在线免费视频 | 日韩免费一区二区三区 |