Java多線程通信wait()和notify()代碼實例_java

來源:腳本之家  責任編輯:小易  

Java的每個對象中都有一個鎖(monitor,也可以成為監視器)并且wait(),notify()等方法用于等待對象的鎖或者通知其他線程對象的監視器可用。在Java的線程中并沒有可供任何對象使用的鎖和同步器。這就是為什么這些方法是Object類的一部分,這樣Java的每一個類都有用于線程間通信的基本方法www.13333515.buzz防采集請勿采集本網。

1.wait()方法和sleep()方法:

喜歡思考絕對是好事,但我希望你對于一個為題你能自己分析的透徹點,wait()當然是線程去等待,線程講的就是電腦的cpu如何工作,而你說的資源了只是數據也就是你給電腦的一種指令,數據有什么

wait()方法在等待中釋放鎖;sleep()在等待的時候不會釋放鎖,抱著鎖睡眠。

可以用其他線程進行喚醒操作,如,notify,notifyAll,也或者在主線程里面中斷掛起的線程 使用interrupt()方法,使其清除掛起狀態!

2.notify():

它們最大本質的區別是:sleep()不釋放同步鎖,wait()釋放同步鎖.還有用法的上的不同是:sleep(milliseconds)可以用時間指定來使他自動醒過來,如果時間不到你只能調用interreput()來強行打斷;wait()

隨機喚醒一個線程,將等待隊列中的一個等待線程從等待隊列中移到同步隊列中。

sleep()使線程停止段間sleep 間間隔期滿線程定立即恢復執行刻其線程能運行且沒調度放棄執行除非(a)\"醒\"線程具更高優先級(b)運行線程其原阻塞wait()線程交互線程同步象x 發wait()調用該線程暫停執行調象

代碼如下

根據原理:通過對一個線程調用wait()函數后,線程就進入停滯狀態。通過調用notify()可以喚起線程。沒有注銷wait時的代碼流程如下 write線程流程: 1、如果ThreadDmeo.hasdate=false,將線程停滯

public class Demo_Print { public static void main(String[] args) { Print p = new Print(); new Thread() { public void run() { while (true) { p.print1(); } }; }.start(); new Thread() { public void run() { while (true) { p.print2(); } }; }.start(); }}class Print { int flag = 1; public synchronized void print1() { if (flag != 1) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.print("你"); System.out.print("好"); System.out.print("嗎????????????"); System.out.println(); flag = 2; this.notify(); } public synchronized void print2() { if (flag != 2) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.print("我"); System.out.print("好"); System.out.println(); flag = 1; this.notify(); }}

在該案例中,實現一問一答的線程同步通信。當方法中開啟了wait()方法后,通過改變flag的值來喚醒線程進而實行另一個方法。

wait 線程等待,等待前面的線程調用完畢后再由新的線程調用該方法。notify 喚醒線程,假如A線程處于wait 狀態那么B線程在執行完后執行notify 或者notifyAll喚醒等待的線程進行任務。synchronized 線程的同步,聲明在需要同步的方法或者變量上。保證是一個一個線程執行著synchronized標識的方法。用volatile修飾的變量,線程在每次使用變量的時候,都會讀取變量修改后的最的值內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • java管道流實現線程間通信過程解析
  • java等待喚醒機制線程通信原理解析
  • java多線程通信實現方式詳解
  • java線程間通信不同步問題原理與模擬實例
  • 深入理解java線程通信
  • java 線程通信相關知識匯總
  • 關于java集合框架面試題(含答案)下
  • 如何理解java中基類子對象的構建過程從"基類向外"進行擴散的?
  • java仿windows記事本小程序
  • java使用poi將word轉換為html
  • java拷貝文件夾和刪除文件夾代碼實例
  • 用eclipse 創建一個簡單的web項目(圖文教程)
  • java.util.arraydeque類使用方法詳解
  • 讓intellij idea支持.vue文件的方法
  • java實現英文翻譯程序
  • java防止重復提交web表單的方法
  • 解釋一下Java多線程通信,wait和notify,synchronized方法和塊,volati
  • java中為什么線程通信的方法wait(), notify()和notifyAll()被定義在Object類里?
  • JAVA線程間通信的幾種方式
  • java 多線程 中 wait(), notify() 的疑問。
  • java里多線程的wait問題
  • java 多線程中wait 怎么辦
  • java多線程 sleep和wait的區別
  • java多線程 sleep和wait的區別
  • Java多線程 為什么加了wait()函數 運行結果就和想象中的不同了
  • 請教java多線程通信的問題
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全c#教程vbvb.netc 語言java編程delphijavaandroidiosswiftscala易語言匯編語言其它相關首頁java管道流實現線程間通信過程解析java等待喚醒機制線程通信原理解析java多線程通信實現方式詳解java線程間通信不同步問題原理與模擬實例深入理解java線程通信java 線程通信相關知識匯總關于java集合框架面試題(含答案)下如何理解java中基類子對象的構建過程從"基類向外"進行擴散的?java仿windows記事本小程序java使用poi將word轉換為htmljava拷貝文件夾和刪除文件夾代碼實例用eclipse 創建一個簡單的web項目(圖文教程)java.util.arraydeque類使用方法詳解讓intellij idea支持.vue文件的方法java實現英文翻譯程序java防止重復提交web表單的方法java使double保留兩位小數的多方java8 十大新特性詳解java.net.socketexception: connjava寫入文件的幾種方法分享java環境變量的設置方法(圖文教程java 十六進制與字符串的轉換java list用法示例詳解java中file類的使用方法javaweb實現文件上傳下載功能實例java 字符串截取的三種方法(推薦struts2框架入門java常用工具類—集合排序java多線程之死鎖的出現和解決方法java語言求解完美數代碼分析java thread多線程詳解及用法解析詳解java的文件與目錄管理以及輸入輸出相springboot在生產快速禁用swagger2的方法spring-boot的debug調試代碼實例簡單了解springboot eureka交流機制java并發編程示例(二):獲取和設置線程信
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果