日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程:等待/通知机制

發布時間:2025/6/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程:等待/通知机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 方法wait()

? ?方法wait()的作用是使當前執行代碼的線程進行等待, wait()被執行后,鎖被自動釋放。wait()方法是Object類的方法,該方法用來將當前線程置入"預執行隊列"中,并且在wait()所在的代碼處停止執行,直到接到通知或被中斷為止。

? ?方法notify()

? ?在執行完notify()方法后,當前線程不會馬上釋放該對象鎖,呈wait狀態的線程也并不能馬上獲取該對象鎖,要等到執行notify()方法的線程將程序執行完,也就是退出synchronized代碼塊后,當前線程才會釋放鎖,而呈wait狀態所在的線程才可以獲取該對象鎖。

? ?notify()方法一次只隨機通知一個線程進行喚醒。

? ?notifyAll()方法喚醒所有線程。

wait(long)方法

? ?帶一個參數的wait(long)方法的功能是等待某一時間是否有線程對鎖進行喚醒,如果超過這個時間則自動喚醒。

public class Run {static private Object lock = new Object();static private Runnable runable1 = new Runnable(){@Overridepublic void run() {synchronized(lock){try {System.out.println("wait begin timer" + System.currentTimeMillis());lock.wait(5000);System.out.println("wait end timer" + System.currentTimeMillis());} catch (InterruptedException e) {e.printStackTrace();}}}};public static void main(String[] args){Thread t = new Thread(runable1);t.start();} }

??

?

當interrupt方法遇到wait方法

? 當線程呈wait狀態時, 調用線程對象的interrupt()方法會出現InterruptedException異常.

public class Service {public void testMethod(Object lock){try{synchronized(lock){System.out.println("begin wait...");lock.wait();//Thread.sleep(10000);System.out.println(" end wait...");}}catch(InterruptedException e){e.printStackTrace();System.out.println("出現異常了,因為呈wait狀態的線程被interrupt了 !");}} }public class ThreadA extends Thread{private Object lock;public ThreadA(Object lock){this.lock = lock;}@Overridepublic void run(){Service service = new Service();service.testMethod(lock);} }public class Test {public static void main(String[] args){try{Object lock = new Object();ThreadA a = new ThreadA(lock);a.start();Thread.sleep(5000);a.interrupt();}catch(InterruptedException e){e.printStackTrace();}} }

通過管道進行線程間通信: 字節流,字符流

? 在jdk中, 提供了4個類來使線程間可以進行通信:?

? ?1). PipedInputStream 和 PipedOutputStream ?處理字節流

? ?2). PipedReader和PipedWriter ?處理字符流

總結

以上是生活随笔為你收集整理的线程:等待/通知机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。