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

溫馨提示×

溫馨提示×

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

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

Java編程語言中注意線程安全和同步是怎樣的

發布時間:2021-11-20 17:56:43 來源:億速云 閱讀:122 作者:柒染 欄目:編程語言

這篇文章給大家介紹Java編程語言中注意線程安全和同步是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Java編程語言對于使用者來說是一個相當簡單的編程語言。但是在使用的時候還是需要我們不斷注意相關問題,下面我們就來熟悉下Java編程語言的線程安全問題和信息同步。

就其自身來說,并發編程是一種技術,提供了操作的同時執行,不論是在單一系統上還是分布在大量系統上。這類操作實際是一些指令順序,例如單獨某個***任務的子任務,這類操作能夠并行執行,或者是作為線程,或者是作為進程。線程和進程之間的本質區別在于:進程通常是獨立的(例如獨立的地址空間),所以只能通過系統提供的進程間通信機制進行交互,而線程通常共享單一進程的狀態信息,能夠直接共享系統資源和內存中的對象。

可以使用下面兩種方法之一,通過多個進程來實現并發。***種方法是在同一個處理器上運行進程,由操作系統處理進程之間的上下文環境切換。(可以理解,這種切換要比同一進程內多線程之間的上下文環境切換更慢。)第二種方法是構建大規模的并行和復雜的分布式系統,在不同的物理處理器上運行多個進程。

從內建支持的角度來說,Java編程語言通過線程提供并發編程;每個 JVM 都能支持許多線程同時執行。可以用以下兩種方法之一在Java編程語言中創建線程:

繼承 java.lang.Thread 類。在這種情況下,已經重寫的子類的 run() 方法必須包含實現線程運行時行為的代碼。要執行這個代碼,需要實例化子類對象,然后調用對象的 start() 方法,這樣就可以在內部執行 run() 方法了。

創建 Runnable 接口的定制實現。這個接口只包含一個 run() 方法,在這個方法中,要放置應用程序代碼。要執行這個代碼,需要實例化實現類的對象,然后在創建新 Thread 時,把對象作為構造函數的參數傳入。然后調用新創建的線程對象的 start() 方法,開始執行控制的新線程。

線程安全性和同步

如果Java編程語言對象中的某個方法能夠安全地運行在多線程環境中,那么就稱該方法是 線程安全的。要獲得這種安全性,必須有一種機制,通過該機制,運行同一方法的多個線程就能夠同步其操作,這樣,在訪問相同的對象或代碼行時,就會只允許一個線程被處理。這種同步要求線程使用叫作 信號 的對象彼此進行溝通。

有一種類型的信號叫作 互斥信號 或 互斥體。顧名思義,這個信號對象的擁有權是互斥的,也就是說,在任意指定時間,只有一個線程能夠擁有互斥體。其他想獲得所有權的線程會被阻塞,它們必須等待,直到擁有互斥體的線程釋放互斥體。如果多個線程按順序排隊等候同一互斥體,那么在當前擁有者釋放它的時候,只有一個等候線程能夠得到它;其他線程將繼續阻塞。

在 1970 年代初,C.A.R. Hoare 和其他人共同開發了一個叫作 監視器 的概念。一個 監視器 就是一個代碼主體,它的訪問受到互斥體的保護。任何想執行這個代碼的線程,都必須在代碼塊頂部得到關聯的互斥體,然后在底部再釋放它。因為在指定時間只有一個線程能夠擁有互斥體,所以這就有效地保證了只有擁有它的線程才能執行監視器的代碼塊。(受保護的代碼不需要相鄰 —— 例如,Java編程語言中的每個對象都有一個與之關聯的監視器。)

任何想在 Java編程語言中進行線程編程的開發人員,都會立即把上面的內容當成 synchronized 關鍵字所帶來的效果。可以確保包含在 synchronized 塊中的 Java 代碼在指定時間只被一個線程執行。在內部,可以由運行時將 synchronized 關鍵字轉換成某一種情況:所有的競爭線程都試圖獲得與它們(指線程)正在操作的對象實例關聯的那個(惟一的一個)互斥體。成功得到互斥體的線程將運行代碼,然后在退出 synchronized 塊時釋放互斥體。

等候和通知

wait/notify 構造在 Java編程語言的線程間通信機制中也扮演了重要的角色。基本的想法是:一個線程需要的某個條件可以由另外一個線程促成。這樣,條件的 wait 就可以得到滿足。一旦條件為真,那么引發條件的線程就會 notify 等候線程蘇醒,并從中止的地方繼續進行。

wait/notify 機制要比 synchronized 機制更難理解和判斷。要想判斷出使用 wait/notify 的方法的行為邏輯,就要求判斷出使用它的所有方法的邏輯。一次判斷一個方法,把該方法和其他方法隔離開,是對整體系統行為得出錯誤結論的可靠方式。顯然,這樣做的復雜性會隨著要判斷的方法的數量增長而迅速提高。

關于Java編程語言中注意線程安全和同步是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

巴林右旗| 怀安县| 尼勒克县| 南华县| 扶余县| 汉源县| 台江县| 莱芜市| 浦东新区| 天长市| 巴彦县| 肥东县| 工布江达县| 武冈市| 龙泉市| 竹北市| 竹山县| 抚远县| 宁明县| 三门峡市| 原平市| 普宁市| 平利县| 上思县| 锦州市| 东阿县| 鲁山县| 泽普县| 太仓市| 山东| 卓资县| 湘西| 新晃| 独山县| 衡山县| 辽阳市| 盖州市| 黄龙县| 苍山县| 石阡县| 海门市|