多執行緒隨筆 1

2021-10-05 22:54:03 字數 2691 閱讀 1634

cas

(v,expected,newvalue)

v(當前值),expected(期望值),newvalue(新值)

當v等於e時,將n賦予v,否則進行自旋操作

在進行cas時,有執行緒更改了v,之後又更改回來,讓程式以為沒發生改變

設立版本號,在cas時加上版本號比較,atmic包中存在版本號的類

lock lock =

newreentrantlock()

;try

catch

(interruptedexception e)

finally

reentrantlock需要手動解鎖,synchronized自動解鎖,兩把鎖都是可重入鎖

reentrantlock可以替代synchronized,reentrantlock還擁有synchronized不存在的方法

trylock()可以設定超時時間,當執行緒未在指定時間內獲得鎖便立刻返回false,反之返回true。

boolean locked =

false

;try

catch

(interruptedexception e)

finally

reentrantlock.lockinterruptibly允許在等待時由其它執行緒呼叫等待執行緒的thread.interrupt方法來中斷等待執行緒的等待而直接返回,這時不用獲取鎖,而會丟擲乙個interruptedexception。

指定reentrantlock為公平鎖,即執行緒的執行是按照fifo的順序執行的(並不絕對)

通過計數控制鎖的鎖定和開啟

countdownlatch是原子類

countdownlatch latch =

newcountdownlatch

(threads.length)

;for

(int i=

0; i;}

for(

int i =

0; i < threads.length; i++

)try

catch

(interruptedexception e)

監聽等待在cyclicbarrier上的執行緒數量,一旦達到指定的數量,就執行cyclicbarrier引數二上的執行緒,之後重新進行監聽,迴圈往復。

cyclicbarrier barrier =

newcyclicbarrier(20

,new

runnable()

for(

int i=

0; i<

100; i++

)catch

(interruptedexception e)

catch

(brokenbarrierexception e)})

.start()

;}

分段執行各個執行緒(類似先非同步後同步)

共享鎖/寫鎖 : readwritelock.readlock()

排它鎖/讀鎖/互斥鎖/獨佔鎖 : readwritelock.writelock()

static lock lock =

newreentrantlock()

;private

static

int value;

static readwritelock readwritelock =

newreentrantreadwritelock()

;static lock readlock = readwritelock.

readlock()

;static lock writelock = readwritelock.

writelock()

;public

static

void

read

(lock lock)

catch

(interruptedexception e)

finally

}public

static

void

write

(lock lock,

int v)

catch

(interruptedexception e)

finally

}public

static

void

main

(string[

] args)

semaphore的作用是限流,可以指定同時執行執行緒的個數

semaphore s =

newsemaphore(1

);。。。// acquire的作用是執行緒獲取鎖,只有獲取到鎖的執行緒才能繼續執行

s.acquire()

;。。。

用於交換兩個執行緒的資料,需要同時呼叫exchanger.exchange()方法

執行緒1呼叫exchanger.exchange()方法,exchanger阻塞執行緒1

執行緒2呼叫exchanger.exchange()方法,exchanger阻塞執行緒2

交換數值

執行緒1和執行緒2繼續執行

多執行緒隨筆

很久沒有更新blog了,太忙了,都沒時間來整理一下知識點,年底了有點時間了,可以好好整理以前寫的專案 了,順便把常用的業務方法都封裝成通用的方法,以便以後使用到能快速完成。切入主題,封裝了乙個常用的多執行緒使用場景的類庫,提供兩種模式,跟大家分享。很多時候,我們會遇到這種情況,事件a和事件b毫無關係...

多執行緒隨筆 2

與wait 的區別 wait需要讓已經獲取鎖的執行緒釋放鎖並阻塞,而locksupport不需要 wait指定喚醒某個執行緒更麻煩,而locksupport更便捷 notify notify不釋放鎖 不可呼叫在wait之前,而unpark可以呼叫在park之前 讓當前執行緒阻塞 locksuppor...

多執行緒 17 多執行緒題1

1 原始 現有的程式 模擬產生了16個日誌物件,並且需要執行16秒才能列印完這些日誌,請在程式中增加4個執行緒去呼叫parselog 方法來分頭列印這16個日誌物件,程式只需要執行4秒即可列印完這些日誌物件。原始 如下 public class test parselog方法內部的 不能改動 pub...