成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java編程語言需要注意線程安全和同步

開發 后端
Java編程語言在目前看來是一門相當簡單的編程語言,但是在實際的使用中我們需要注意在線程安全和同步上下功夫。

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

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

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

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

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

創建 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 的方法的行為邏輯,就要求判斷出使用它的所有方法的邏輯。一次判斷一個方法,把該方法和其他方法隔離開,是對整體系統行為得出錯誤結論的可靠方式。顯然,這樣做的復雜性會隨著要判斷的方法的數量增長而迅速提高。

 

責任編輯:張浩 來源: 博客園
相關推薦

2010-09-01 13:37:32

2020-03-19 15:02:53

Go語言學習

2009-06-30 10:10:15

Namespace用法Flex

2015-09-16 13:19:11

2020-10-26 14:01:22

Java泛型

2023-02-16 07:27:15

2014-12-23 13:50:46

多播組播

2011-05-26 17:37:11

Ajax

2020-09-28 11:14:57

線程數據語言

2023-12-21 10:34:04

2016-09-23 16:09:01

2010-07-20 15:00:06

網上購物信息安全360安全中心

2017-01-06 15:09:13

編程訣竅

2009-07-16 09:25:27

Java常量定義

2013-09-29 10:36:08

VMware虛擬化

2009-04-23 14:30:19

UML建模

2023-07-27 18:39:20

低代碼開發編碼

2014-07-23 14:47:35

數據保護災難恢復GRC

2025-02-19 00:05:18

Java并發編程

2023-09-26 10:30:57

Linux編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99福利视频 | 91免费观看视频 | 欧美日产国产成人免费图片 | 欧美精品在线免费观看 | 日中文字幕在线 | 蜜臀网站| 精品久久久久久久久久久 | 国产视频一区二区 | 国产精品视频一二三区 | 天天爽夜夜骑 | 国产一区二区三区四区五区加勒比 | 91午夜在线 | 国产精品久久久久久久午夜片 | 欧美福利一区 | 一级黄色片在线看 | 99久久成人| 亚洲国产一区在线 | 欧美成人一区二区三区 | 欧美综合久久 | 91传媒在线观看 | 国产免费观看一区 | 国产中文| 日韩av中文 | 亚洲午夜精品一区二区三区 | 中文在线观看视频 | 精品一区二区三区不卡 | 91视频久久| 偷牌自拍| 日韩视频 中文字幕 | 成人在线观看免费视频 | 999免费观看视频 | 青春草91 | 成人av免费在线观看 | 观看av| 婷婷丁香在线视频 | 国产精品久久网 | 欧美精品一区在线 | 亚洲国产成人精品女人久久久 | 亚洲夜夜爽 | av激情在线 | 日韩av成人 |