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

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

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

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

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

可以使用下面兩種方法之一,通過多個進(jìn)程來實現(xiàn)并發(fā)。***種方法是在同一個處理器上運行進(jìn)程,由操作系統(tǒng)處理進(jìn)程之間的上下文環(huán)境切換。(可以理解,這種切換要比同一進(jìn)程內(nèi)多線程之間的上下文環(huán)境切換更慢。)第二種方法是構(gòu)建大規(guī)模的并行和復(fù)雜的分布式系統(tǒng),在不同的物理處理器上運行多個進(jìn)程。

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

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

創(chuàng)建 Runnable 接口的定制實現(xiàn)。這個接口只包含一個 run() 方法,在這個方法中,要放置應(yīng)用程序代碼。要執(zhí)行這個代碼,需要實例化實現(xiàn)類的對象,然后在創(chuàng)建新 Thread 時,把對象作為構(gòu)造函數(shù)的參數(shù)傳入。然后調(diào)用新創(chuàng)建的線程對象的 start() 方法,開始執(zhí)行控制的新線程。

線程安全性和同步

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

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

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

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

等候和通知

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

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

 

責(zé)任編輯:張浩 來源: 博客園
相關(guān)推薦

2010-09-01 13:37:32

2020-03-19 15:02:53

Go語言學(xué)習(xí)

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

多播組播

2023-12-21 10:34:04

2011-05-26 17:37:11

Ajax

2020-09-28 11:14:57

線程數(shù)據(jù)語言

2016-09-23 16:09:01

2010-07-20 15:00:06

網(wǎng)上購物信息安全360安全中心

2009-07-16 09:25:27

Java常量定義

2017-01-06 15:09:13

編程訣竅

2025-02-19 00:05:18

Java并發(fā)編程

2023-07-27 18:39:20

低代碼開發(fā)編碼

2014-07-23 14:47:35

數(shù)據(jù)保護(hù)災(zāi)難恢復(fù)GRC

2013-09-29 10:36:08

VMware虛擬化

2009-04-23 14:30:19

UML建模

2023-09-26 10:30:57

Linux編程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美午夜一区 | 国产免费xxx | 在线播放亚洲 | 九九热久久免费视频 | 99久久免费精品国产男女高不卡 | 一级毛片色一级 | 人人射人人插 | 91麻豆精品国产91久久久久久久久 | 久久久久国产一区二区三区四区 | 国产精品日韩 | 在线日韩视频 | 国产 欧美 日韩 一区 | 免费小视频在线观看 | 黄免费看 | 国产精品99久久久久久久久 | 国产精品国产三级国产a | 免费a v网站| 精品国产欧美一区二区三区成人 | 日韩在线一区二区 | 亚洲国产精品一区二区第一页 | 欧美亚洲视频在线观看 | 精产国产伦理一二三区 | 国产三级一区二区三区 | 日日夜夜免费精品视频 | 美女黄色在线观看 | 中文字幕免费在线 | 国产精品久久久久999 | 欧美一区二区三区电影 | 国产激情精品 | 亚洲欧洲av在线 | 成人久久久 | 日本一道本视频 | av一区二区三区四区 | 草久久 | 久久精品一二三影院 | 国产欧美日韩二区 | 欧美va大片| 午夜视频一区 | 男女那个视频 | 久久精品99国产精品 | 91久久久久久 |