中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何在兩個線程間進行通訊

發布時間:2021-12-20 14:06:13 來源:億速云 閱讀:348 作者:iii 欄目:云計算

這篇文章主要介紹“Java如何在兩個線程間進行通訊”,在日常操作中,相信很多人在Java如何在兩個線程間進行通訊問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java如何在兩個線程間進行通訊”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在并發編程中,我們必須考慮的問題時如何在兩個線程間進行通訊。這里的通訊指的是不同的線程之間如何交換信息。
目前有兩種方式:

  1. 共享內存

  2. 消息傳遞(actor 模型)

#共享內存
共享內存這種方式比較常見,我們經常會設置一個共享變量。然后多個線程去操作同一個共享變量。從而達到線程通訊的目的。例如,我們使用多個線程去執行頁面抓取任務,我們可以使用一個共享變量count來記錄任務完成的數量。每當一個線程完成抓取任務,會在原來的count上執行加1操作。這樣每個線程都可以通過獲取這個count變量來獲得當前任務的完成情況。當然必須要考慮的是共享變量的同步問題,這也共享內存容易出錯的原因所在。
Java如何在兩個線程間進行通訊
這種通訊模型中,不同的線程之間是沒有直接聯系的。都是通過共享變量這個“中間人”來進行交互。而這個“中間人”必要情況下還需被保護在臨界區內(加鎖或同步)。由此可見,一旦共享變量變得多起來,并且涉及到多種不同線程對象的交互,這種管理會變得非常復雜,極容易出現死鎖等問題。
給出案例

#消息傳遞
消息傳遞方式采取的是線程之間的直接通信,不同的線程之間通過顯式的發送消息來達到交互目的。消息傳遞最有名的方式應該是actor模型了。在這種模型下,一切都是actor,所有的actor之間的通信都必須通過傳遞消息才能達到。每個actor都有一個收件箱(消息隊列)用來保存收到其他actor傳遞來的消息。actor自己也可以給自己發送消息。這才是面向對象的精髓啊!
Java如何在兩個線程間進行通訊
這種模型看起來比共享內存模型要復雜。但是一旦碰到復雜業務的話,actor模型的優勢就體現出來了。我們還是以剛才多線程抓取網站為例子看一下在這種模型下如何去解決。
首先我們定義一個統計actor用來統計任務完成量。然后把多個網址(消息方式)發給多個抓取actor,抓取actor處理完任務后發送消息通知統計actor任務完成,統計actor對自己保存的變量count(這個只有統計actor才能看到)加一。
最后讓我們來總結一下這兩種通訊模式:

并發模型通信機制同步機制
共享內存線程之間共享程序的公共狀態,線程之間通過寫-讀內存中的公共狀態來隱式進行通信同步是顯式進行的。程序員必須顯式指定某個方法或某段代碼需要在線程之間互斥執行。
消息傳遞(actor)線程之間沒有公共狀態,線程之間必須通過明確的發送消息來顯式進行通信.由于消息的發送必須在消息的接收之前,因此同步是隱式進行的。

到此,關于“Java如何在兩個線程間進行通訊”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

义马市| 凤庆县| 广州市| 黄大仙区| 潞城市| 来安县| 屏东市| 收藏| 宁波市| 贡嘎县| 奎屯市| 扶风县| 威海市| 汕头市| 和硕县| 乐业县| 天柱县| 和龙市| 长治市| 长垣县| 樟树市| 黎川县| 繁峙县| 新巴尔虎左旗| 政和县| 三门县| 绍兴县| 且末县| 平邑县| 宁武县| 聂拉木县| 东方市| 星座| 南漳县| 新疆| 永川市| 景德镇市| 澎湖县| 正蓝旗| 波密县| 手机|