多執行緒 Lock

2021-10-04 22:45:11 字數 2246 閱讀 2562

reentrantlock和synchronized區別

作用跟synchronized 鎖一樣

reentrantlock 底層是 cas (值,期望,預期) synchronized 底層鎖公升級

reentrantlock 可以trylock 嘗試鎖

a. 如果在某時間段內獲取到鎖,就執行

b. 如果拿不到鎖,不需要跟synchronized一樣wait,可以直接跳過,繼續執行**

需要手動釋放鎖,必須try catch finally lock.unlock

synchronized 自動釋放鎖

reentrantlock 可以打斷鎖 interrupt 停止等待,跳過被鎖部分,執行別的**

reentrantlock 可以是公平鎖, synchronized 只能是競爭鎖

多執行緒的鎖是加在物件上面的,放在物件的markworld上面,當執行緒來的時候,看物件上的markworld上的值是否是該執行緒,是執行,不是,等待

該方法測試 lock鎖 鎖重入 trylock(返回時間到了,是否拿到鎖)

public class thread_09_reentrantlock 

}catch (exception e)finally

}private void push()catch (exception e)finally

}private void trylock()catch (exception e)finally

system.out.println("方法三結束");

}public static void main(string args)

}

reentrantlock 可以被打斷的鎖 (condition問題,生產者消費者解決)
public class thread_10_reentrantlock_interrupt ).start();

trycatch (exception e)

thread t2 = new thread(() -> );

t2.start();

trycatch (exception e)

system.out.println("我受夠了無邊的等待");

t2.interrupt(); //打斷執行緒二的等待

}private static void sleepmax(thread_10_reentrantlock_interrupt t) catch (exception e)finally

}private static void method2(thread_10_reentrantlock_interrupt t) catch (exception e)finally

system.out.println(t.lock.trylock()+"我釋放鎖了");}}

}

reentrantlock 公平鎖
public class thread_11_reentrantlock_fair catch (exception e)

system.out.println(threadname+"獲取到鎖了");

lock.unlock();}}

public static void main(string args) ).start();

new thread(()->).start();

}}

countdownlatch 管理執行緒 – 執行緒門栓
public class thread_12_countdownlatch 

count.countdown();

}/**

* 使用執行緒安全的類 cas

*/private void insertnum()

count.countdown();

}public static void main(string args)

threadlist.foreach((o)->o.start());

trycatch (exception e)

system.out.println("總數為"+t.atomicinteger);

}}

countdownlatch 和 thread.join 區別:

countdownlatch 比較靈活,可以在任何時間countdown

**裡面一定要try catch finally裡面 countdown

個人喜歡countdownlatch

C 多執行緒Lock

一.為什麼要lock,lock了什麼?當我們使用 執行緒的時候,效率最高的方式當然是 非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要 同步機制 了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作...

Java多執行緒 Lock

reentrantlock可以和synchronized達到一樣的效果,並且擴充套件功能上也更加強大,而且使用更加靈活。lock lock new reentrantlock 加鎖 lock.lock 取消鎖 lock.unlock 等待通知模式 synchronized與wait 和notify方...

多執行緒系列九 lock

public inte ce lock即在不同方法中呼叫lock,獲得的都是物件鎖。public class conditiontest catch interruptedexception e finally system.out.println after await public void s...