當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 基礎(chǔ)知識(shí)科普站
[導(dǎo)讀]線程的同步是Java多線程編程的難點(diǎn),往往開發(fā)者搞不清楚什么是競(jìng)爭(zhēng)資源、什么時(shí)候需要考慮同步,怎么同步等等問(wèn)題。

線程的同步是Java多線程編程的難點(diǎn),往往開發(fā)者搞不清楚什么是競(jìng)爭(zhēng)資源、什么時(shí)候需要考慮同步,怎么同步等等問(wèn)題,當(dāng)然,這些問(wèn)題沒有很明確的答案,但有些原則問(wèn)題需要考慮,是否有競(jìng)爭(zhēng)資源被同時(shí)改動(dòng)的問(wèn)題?對(duì)于同步,在具體的Java代碼中需要完成以下兩個(gè)操作:把競(jìng)爭(zhēng)訪問(wèn)的資源標(biāo)識(shí)為private;同步哪些修改變量的代碼,使用synchronized關(guān)鍵字同步方法或代碼。當(dāng)然這不是唯一控制并發(fā)安全的途徑。synchronized關(guān)鍵字使用說(shuō)明synchronized只能標(biāo)記非抽象的方法,不能標(biāo)識(shí)成員變量。為了演示同步方法的使用,構(gòu)建了一個(gè)信用卡賬戶,起初信用額為100w,然后模擬透支、存款等多個(gè)操作。

顯然銀行賬戶User對(duì)象是個(gè)競(jìng)爭(zhēng)資源,而多個(gè)并發(fā)操作的是賬戶方法oper(int x),當(dāng)然應(yīng)該在此方法上加上同步,并將賬戶的余額設(shè)為私有變量,禁止直接訪問(wèn)。工作原理線程是進(jìn)程中的實(shí)體,一個(gè)進(jìn)程可以擁有多個(gè)線程,一個(gè)線程必須有一個(gè)父進(jìn)程。線程不擁有系統(tǒng)資源,只有運(yùn)行必須的一些數(shù)據(jù)結(jié)構(gòu);它與父進(jìn)程的其它線程共享該進(jìn)程所擁有的全部資源。線程可以創(chuàng)建和撤消線程,從而實(shí)現(xiàn)程序的并發(fā)執(zhí)行。

線程同步及其實(shí)現(xiàn)

一般,線程具有就緒、阻塞和運(yùn)行三種基本狀態(tài)。在多中央處理器的系統(tǒng)里,不同線程可以同時(shí)在不同的中央處理器上運(yùn)行,甚至當(dāng)它們屬于同一個(gè)進(jìn)程時(shí)也是如此。大多數(shù)支持多處理器的操作系統(tǒng)都提供編程接口來(lái)讓進(jìn)程可以控制自己的線程與各處理器之間的關(guān)聯(lián)度(affinity)。有時(shí)候,線程也稱作輕量級(jí)進(jìn)程。就象進(jìn)程一樣,線程在程序中是獨(dú)立的、并發(fā)的執(zhí)行路徑,每個(gè)線程有它自己的堆棧、自己的程序計(jì)數(shù)器和自己的局部變量。但是,與分隔的進(jìn)程相比,進(jìn)程中的線程之間的隔離程度要小。它們共享內(nèi)存、文件句柄和其它每個(gè)進(jìn)程應(yīng)有的狀態(tài)。進(jìn)程可以支持多個(gè)線程,它們看似同時(shí)執(zhí)行,但互相之間并不同步。一個(gè)進(jìn)程中的多個(gè)線程共享相同的內(nèi)存地址空間,這就意味著它們可以訪問(wèn)相同的變量和對(duì)象,而且它們從同一堆中分配對(duì)象。

盡管這讓線程之間共享信息變得更容易,但您必須小心,確保它們不會(huì)妨礙同一進(jìn)程里的其它線程。Java 線程工具和 API看似簡(jiǎn)單。但是,編寫有效使用線程的復(fù)雜程序并不十分容易。因?yàn)橛卸鄠€(gè)線程共存在相同的內(nèi)存空間中并共享相同的變量,所以您必須小心,確保您的線程不會(huì)互相干擾。線程屬性為了正確有效地使用線程,必須理解線程的各個(gè)方面并了解Java 實(shí)時(shí)系統(tǒng)。必須知道如何提供線程體、線程的生命周期、實(shí)時(shí)系統(tǒng)如 何調(diào)度線程、線程組、什么是幽靈線程(Demo nThread)。線程體所有的操作都發(fā)生在線程體中,在Java中線程體是從Thread類繼承的run()方法,或?qū)崿F(xiàn)Runnable接口的類中的run()方法。當(dāng)線程產(chǎn)生并初始化后,實(shí)時(shí)系統(tǒng)調(diào)用它的run()方法。run()方法內(nèi)的代碼實(shí)現(xiàn)所產(chǎn)生線程的行為,它是線程的主要部分。

雖然我們說(shuō)線程是并發(fā)運(yùn)行的。然而事實(shí)常常并非如此。正如前面談到的,當(dāng)系統(tǒng)中只有一個(gè)CPU時(shí),以某種順序在單CPU情況下執(zhí)行多線程被稱為調(diào)度(scheduling)。Java采用的是一種簡(jiǎn)單、固定的調(diào)度法,即固定優(yōu)先級(jí)調(diào)度。這種算法是根據(jù)處于可運(yùn)行態(tài)線程的相對(duì)優(yōu)先級(jí)來(lái)實(shí)行調(diào)度。當(dāng)線程產(chǎn)生時(shí),它繼承原線程的優(yōu)先級(jí)。在需要時(shí)可對(duì)優(yōu)先級(jí)進(jìn)行修改。在任何時(shí)刻,如果有多條線程等待運(yùn)行,系統(tǒng)選擇優(yōu)先級(jí)最高的可運(yùn)行線程運(yùn)行。只有當(dāng)它停止、自動(dòng)放棄、或由于某種原因成為非運(yùn)行態(tài)低優(yōu)先級(jí)的線程才能運(yùn)行。如果兩個(gè)線程具有相同的優(yōu)先級(jí),它們將被交替地運(yùn)行?!ava實(shí)時(shí)系統(tǒng)的線程調(diào)度算法還是強(qiáng)制性的,在任何時(shí)刻,如果一個(gè)比其他線程優(yōu)先級(jí)都高的線程的狀態(tài)變?yōu)榭蛇\(yùn)行態(tài),實(shí)時(shí)系統(tǒng)將選擇該線程來(lái)運(yùn)行。一個(gè)應(yīng)用程序可以通過(guò)使用線程中的方法setPriority(int),來(lái)設(shè)置線程的優(yōu)先級(jí)大小。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉