自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java多線程鎖如何進(jìn)行數(shù)據(jù)同步共享

開發(fā) 后端
Java多線程鎖需要我們大家詳細(xì)的學(xué)習(xí)一下,在數(shù)據(jù)安全方面Java多線程鎖就是一個(gè)相當(dāng)重要的技術(shù)語(yǔ)法。希望大家詳細(xì)學(xué)習(xí)。

Java多線程鎖是為了解決數(shù)據(jù)同步中的數(shù)據(jù)安全問題,下面我們就來(lái)詳細(xì)的學(xué)習(xí)下有關(guān)于Java多線程鎖的相關(guān)問題。只有不斷的學(xué)習(xí)才能不斷的提高自身的相關(guān)技術(shù)。

大多數(shù)應(yīng)用程序要求線程互相通信來(lái)同步它們的動(dòng)作。在Java程序中最簡(jiǎn)單實(shí)現(xiàn)同步的方法就是上Java多線程鎖。為了防止同時(shí)訪問共享資源,線程在使用資源的前后可以給該資源上鎖和開鎖。假想給復(fù)印機(jī)上鎖,任一時(shí)刻只有一個(gè)職員擁有鑰匙。若沒有鑰匙就不能使用復(fù)印機(jī)。#t#

給共享變量上Java多線程鎖就使得Java線程能夠快速方便地通信和同步。某個(gè)線程若給一個(gè)對(duì)象上了鎖,就可以知道沒有其他線程能夠訪問該對(duì)象。即使在搶占式模型中,其他線程也不能夠訪問此對(duì)象,直到上鎖的線程被喚醒、完成工作并開鎖。那些試圖訪問一個(gè)上鎖對(duì)象的線程通常會(huì)進(jìn)入睡眠狀態(tài),直到上鎖的線程開鎖。一旦鎖被打開,這些睡眠進(jìn)程就會(huì)被喚醒并移到準(zhǔn)備就緒隊(duì)列中。

在Java編程中,所有的對(duì)象都有鎖。線程可以使用synchronized關(guān)鍵字來(lái)獲得鎖。在任一時(shí)刻對(duì)于給定的類的實(shí)例,方法或同步的代碼塊只能被一個(gè)線程執(zhí)行。這是因?yàn)榇a在執(zhí)行之前要求獲得對(duì)象的Java多線程鎖。繼續(xù)我們關(guān)于復(fù)印機(jī)的比喻,為了避免復(fù)印沖突,我們可以簡(jiǎn)單地對(duì)復(fù)印資源實(shí)行同步。如同下列的代碼例子,任一時(shí)刻只允許一位職員使用復(fù)印資源。通過(guò)使用方法(在 Copier 對(duì)象中)來(lái)修改復(fù)印機(jī)狀態(tài)。這個(gè)方法就是同步方法。只有一個(gè)線程能夠執(zhí)行一個(gè)Copier對(duì)象中同步代碼,因此那些需要使用Copier對(duì)象的職員就必須排隊(duì)等候。

 

  1. class CopyMachine {  
  2. public synchronized void makeCopies(Document d, int nCopies) {  
  3. //only one thread executes this at a time  
  4. }  
  5. public void loadPaper() {  
  6. //multiple threads could access this at once!  
  7. synchronized(this) {  
  8. //only one thread accesses this at a time  
  9. //feel free to use shared resources, overwrite members, etc. 

 

Fine-grain Java多線程鎖

在對(duì)象級(jí)使用鎖通常是一種比較粗糙的方法。為什么要將整個(gè)對(duì)象都上鎖,而不允許其他線程短暫地使用對(duì)象中其他同步方法來(lái)訪問共享資源?如果一個(gè)對(duì)象擁有多個(gè)資源,就不需要只為了讓一個(gè)線程使用其中一部分資源,就將所有線程都鎖在外面。由于每個(gè)對(duì)象都有Java多線程鎖,可以如下所示使用虛擬對(duì)象來(lái)上鎖:

 

  1. class FineGrainLock {  
  2. MyMemberClass x, y;  
  3. Object xlock = new Object(), ylock = new Object();  
  4. public void foo() {  
  5. synchronized(xlock) {  
  6. //access x here  
  7. }  
  8. //do something here - but don't use shared resources  
  9. synchronized(ylock) {  
  10. //access y here  
  11. }  
  12. }  
  13. public void bar() {  
  14. synchronized(this) {  
  15. //access both x and y here  
  16. }  
  17. //do something here - but don't use shared resources  
  18. }  

 

若為了在方法級(jí)上同步,不能將整個(gè)方法聲明為synchronized關(guān)鍵字。它們使用的是成員Java多線程鎖,而不是synchronized方法能夠獲得的對(duì)象級(jí)鎖。

 

責(zé)任編輯:張浩 來(lái)源: CSDN
相關(guān)推薦

2010-03-17 18:21:54

Java多線程靜態(tài)數(shù)據(jù)

2010-03-16 15:32:26

2010-03-16 13:47:48

Java多線程服務(wù)器

2010-02-02 10:04:58

2022-05-25 15:33:27

區(qū)塊鏈加密貨幣

2011-05-25 00:00:00

數(shù)據(jù)庫(kù)設(shè)計(jì)

2020-04-30 10:09:23

數(shù)字資產(chǎn)管理DAM數(shù)字資產(chǎn)

2017-03-07 10:37:05

非數(shù)據(jù)數(shù)據(jù)分析

2009-09-10 23:17:33

ASP.NET Eva

2024-06-28 08:45:58

2021-07-28 15:44:52

Java開發(fā)數(shù)據(jù)庫(kù)

2021-05-26 10:12:07

數(shù)字化轉(zhuǎn)型IT領(lǐng)導(dǎo)者

2009-03-24 08:56:23

數(shù)據(jù)同步多線程Java

2010-02-01 17:33:24

Python主線程

2021-12-14 22:12:30

云計(jì)算云存儲(chǔ)IT

2015-06-09 16:22:05

數(shù)據(jù)中心

2018-10-25 15:55:44

Java多線程鎖優(yōu)化

2022-08-17 06:25:19

偽共享多線程

2015-04-21 14:21:07

大數(shù)據(jù)數(shù)據(jù)分析

2021-03-05 07:38:52

C++線程編程開發(fā)技術(shù)
點(diǎn)贊
收藏

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