導航:首頁 > 編程知識 > pc編程中線程同步的方式有哪些

pc編程中線程同步的方式有哪些

發布時間:2024-07-12 20:25:49

java中線程同步的幾種方法

線程同步主要有以下種方法(示例中是實現計數的功能):

1、同步方法,即使用synchronized關鍵字修飾方法,例如:

publicsynchronizedvoidadd(intc){...}

2、同步代碼塊,即有synchronized關鍵字修飾的語句塊,例如:

publicvoidaddAndGet(intc){
synchronized(this){
count+=c;
}
}

3、使用特殊域變數(volatile)實現線程同步,該方法不能保證絕對的同步。

例如:privatevolatileintcount=0;

4、使用鎖實現線程同步,例如:

privateLocklock=newReentrantLock();
publicvoidadd(intc){
lock.lock();//上鎖
try{
count+=c;
}finally{
lock.unlock();//解鎖
}
}

5、使用原子變數實現線程同步,在java的util.concurrent.atomic包中提供了創建了原子類型變數的工具類,例如:

privateAtomicIntegercount=newAtomicInteger(1);
publicvoidadd(intc){
count.addAndGet(c);
}

6、使用局部變數實現線程同步,如果使用ThreadLocal管理變數,則每一個使用該變數的線程都獲得該變數的副本, 副本之間相互獨立,這樣每一個線程都可以隨意修改自己的變數副本,而不會對其他線程產生影響。

ThreadLocal 類的常用方法

new ThreadLocal<T>() : 創建一個線程本地變數

get() : 返回此線程局部變數的當前線程副本中的值

initialValue() : 返回此線程局部變數的當前線程的"初始值"

set(T value) : 將此線程局部變數的當前線程副本中的值設置為value

示例代碼:

privatestaticThreadLocal<Integer>count=newThreadLocal<Integer>(){
@Override
protectedIntegerinitialValue(){
return1;
}
};

publicvoidadd(intc){
count.set(count.get()+c);
}

7、使用阻塞隊列實現,例如LinkedBlockingQueue,具體使用可網路LinkedBlockingQueue的用法或查看java文檔。

② Java 線程同步幾種方式

(1)同步來方法:
即有synchronized關鍵字修飾的自方法。 由於java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時,內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處於阻塞狀態。
(2)同步代碼塊
即有synchronized關鍵字修飾的語句塊。被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步
(3)使用特殊域變數(Volatile)實現線程同步
a.volatile關鍵字為域變數的訪問提供了一種免鎖機制
b.使用volatile修飾域相當於告訴虛擬機該域可能會被其他線程更新
c.因此每次使用該域就要重新計算,而不是使用寄存器中的值
d.volatile不會提供任何原子操作,它也不能用來修飾final類型的變數
(4)使用重入鎖實現線程同步
在JavaSE5.0中新增了一個java.util.concurrent包來支持同步。ReentrantLock類是可重入、互斥、實現了Lock介面的鎖, 它與使用synchronized方法和快具有相同的基本行為和語義,並且擴展了其能力。
(5)使用局部變數實現線程同步

③ JAVA中線程同步方法有哪些

JAVA中線程同步的概念在同一個線程運行 前面的運行完在運行後面的 有先後順序 ,簡單的講就是版像排隊一樣有權先後順序。
同步的方法有下面3種;
1,wait方法:
該方法屬於Object的方法,wait方法的作用是使得當前調用wait方法所在部分(代碼塊)的線程停止執行,並釋放當前獲得的調用wait所在的代碼塊的鎖,並在其他線程調用notify或者notifyAll方法時恢復到競爭鎖狀態(一旦獲得鎖就恢復執行)。
2 notify方法和notifyAll方法:
notify方法通知調用了wait方法,但是尚未激活的一個線程進入線程調度隊列(即進入鎖競爭),注意不是立即執行。並且具體是哪一個線程不能保證。另外一點就是被喚醒的這個線程一定是在等待wait所釋放的鎖。
notifyAll方法則喚醒所有調用了wait方法,尚未激活的進程進入競爭隊列。
3。 synchronized關鍵字:

synchronized用來標識一個普通方法時,表示一個線程要執行該方法,必須取得該方法所在的對象的鎖。
根據項目的需求,選擇有哪一種方法好一些。

閱讀全文

與pc編程中線程同步的方式有哪些相關的資料

熱點內容
百信集團的網站叫什麼名字 瀏覽:67
開發解壓app理念是什麼 瀏覽:128
linux源代碼路徑 瀏覽:854
美圖2root後不能升級了 瀏覽:133
shell文件size 瀏覽:350
通過大數據查幹部哪些內容 瀏覽:78
如何編程輸出一個數的十位數 瀏覽:760
9月7日蘋果發布會 瀏覽:150
u盤里文件打開都是亂碼怎麼辦 瀏覽:402
文件管理里可以復制 瀏覽:60
怎麼斷數據源 瀏覽:371
linux文件夾遞歸賦權 瀏覽:103
阻止U盤寫入特定後綴文件 瀏覽:8
車載gps埠檢測工具 瀏覽:244
多重網路取消合並 瀏覽:876
哪個APP看電影刪減的少 瀏覽:160
蘋果6進水讀不了卡什麼原因 瀏覽:68
網盤文件怎麼提取到筆記軟體里 瀏覽:136
java解析簡單json數據類型 瀏覽:750
008神器破解版使用教程 瀏覽:974

友情鏈接