Java併發 多執行緒

2021-09-02 20:39:38 字數 2260 閱讀 6812

執行緒狀態

每個執行緒可以看做不同的任務,cpu需要分配每個執行緒不同的使用時間,cpu需要不同的執行緒之間來回切換,造成執行緒可能存在的不同狀態。

新建執行緒

public

class

thread1

extends

thread}}

public

class

runnable1

implements

runnable}}

public

class

test

}

執行緒的方法

兩個執行緒從交叉執行變成了序列方式,看一下join的原始碼,發現它是由synchronized 方法修飾的,每個類都具有乙個物件鎖,synchronized 修飾的方法執行時會獲取這個物件鎖,其他執行緒不能方法,需要等該執行緒執行完/釋放鎖才可以。

public

final

synchronized

void

join

(long millis)

throws interruptedexception

if(millis ==0)

}else

wait

(delay)

; now = system.

currenttimemillis()

- base;}}

}

執行緒優先順序

每個執行緒都具有優先順序,預設為1-10,呼叫setpriority( int newpriority)方法來提高或者降低任何執行緒的優先順序,具有較高的優先順序會具有更多的cpu使用權。

多個執行緒訪問相同物件的時候,訪問資料的時候回造成誤傷.

public

class

ticket

catch

(interruptedexception e)

} count--

; system.out.

println

(thread.

currentthread()

.getname()

+"---"

+"購票成功!!!"

+"餘票還有"

+this

.count);}

}}public

class

thread1

extends

thread

public

void

run()}

}public

class

test

}

於是,可能出現這種問題!!!當票們還有一張的時候,兩個執行緒都通過判斷(通過執行緒睡眠模擬了一下情況),並買了票,票的餘額為-1。so,雖然出現的機率很小,但還是要避免。

(物件)

//lock是個介面,需要用到子類reentrantlock來新建鎖。

private lock lock =

newreentrantlock()

;//方法一共兩個,lock(),unlock(),理解為上鎖,解鎖,也可以用trylock來判斷該物件鎖是否已經被持有。

lock.

lock()

;//需要同步的**

lock.

unlock

();

多執行緒 Java多執行緒與併發

實現的方式主要有三種 執行緒的狀態 基本差別 最主要的本質區別 兩個概念 鎖池 假設執行緒a已經擁有了某個物件 不是類 的鎖,而其他執行緒b c想要呼叫這個物件的某個synchronized方法 或者塊 由於b c執行緒在進入物件的synchronized方法 或者塊 之前必須先獲得該物件鎖的擁有權...

Java多執行緒與併發 Java鎖

累嗎?累就對了,說明你還活著 公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,先來後到。非公平鎖 是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖。在高併發的情況下,有可能會造成優先順序反轉或者飢餓現象 並發包中reentrantlock...

java 多執行緒的併發控制

synchronized必須鎖的是物件,基本資料型別的變數不能當作物件鎖。要保證多執行緒使用的是同乙個互斥鎖 物件鎖 才能進行同步。死鎖的兩種情況 1 多個執行緒共用同乙個物件鎖,互相等待。2 互相持有對方所需的資源 即每個執行緒都需要同時拿到多個資源才能繼續執行,而多個執行緒都處於 各持有一部分,...