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

2021-09-13 17:50:52 字數 1363 閱讀 3436

實現的方式主要有三種

執行緒的狀態

基本差別

最主要的本質區別

兩個概念

鎖池

假設執行緒a已經擁有了某個物件(不是類)的鎖,而其他執行緒b、c想要呼叫這個物件的某個synchronized方法(或者塊),由於b、c執行緒在進入物件的synchronized方法(或者塊)之前必須先獲得該物件鎖的擁有權,而恰巧該物件的鎖目前正被執行緒a所占用,此時b、c執行緒就會被阻塞,進入乙個地方去等待鎖的釋放,這個地方便是物件的鎖池

等待池

假設執行緒a呼叫了某個物件的wait()方法,執行緒a就會釋放該物件的鎖,同時執行緒a就會進入到該物件的等待池中,進入到等待池中的執行緒不會去競爭該物件的鎖

notify 和 notifyall 的區別

yield

當呼叫thread.yield()函式時,會給執行緒排程器乙個當前執行緒願意讓出cpu使用的暗示,但是執行緒排程器可能會忽略這個暗示

如何中斷執行緒

執行緒安全問題的主要誘因

互斥鎖的特性

根據獲取的鎖的分類:獲取物件鎖和獲取類鎖

自旋鎖

自適應自旋鎖

synchronized的四種狀態

偏向鎖:減少同一執行緒獲取鎖的代價

輕量級鎖

與synchronized的區別

reentrantlock公平性的設定

reentrantlock將鎖物件化

總結

cas有3個運算元,記憶體值v,舊的預期值a,要修改的新值b。當且僅當預期值a和記憶體值v相同時,將記憶體值v修改為b,否則返回v

一種高效實現執行緒安全性的方法

缺點

Java併發 多執行緒

執行緒狀態 每個執行緒可以看做不同的任務,cpu需要分配每個執行緒不同的使用時間,cpu需要不同的執行緒之間來回切換,造成執行緒可能存在的不同狀態。新建執行緒 public class thread1 extends thread public class runnable1 implements ...

Java多執行緒與併發 Java鎖

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

併發與多執行緒

標頭檔案 include c 11建立執行緒 thread th myfunc 建立乙個子執行緒,並且子執行緒開始執行,引數為可呼叫物件,可以是函式,仿函式,lambda表示式,下面給出例子示例 void myfunc class myclass void func intmain thread t...