java 多執行緒的併發控制

2021-07-11 10:07:03 字數 795 閱讀 3560

★ synchronized必須鎖的是物件,基本資料型別的變數不能當作物件鎖。

★ 要保證多執行緒使用的是同乙個互斥鎖(物件鎖),才能進行同步。

★ 死鎖的兩種情況:

1)多個執行緒共用同乙個物件鎖,互相等待。

2)互相持有對方所需的資源(即每個執行緒都需要同時拿到多個資源才能繼續執行,而多個執行緒都處於:各持有一部分,在等待另一部分。)

★ 死鎖的解決

要從設計方面去解決避免,即在設計時就考慮不能出現死鎖。

羅列出所有臨界資源,畫分布圖,從圖中觀察其中的死鎖情況,改變其中執行緒的(臨界)資源的獲取方式。

設計原則:盡量讓程式中少出現臨界資源。 '

★ wait/notify 和 sleep方法

wait和notify只能在它們被呼叫的例項的同步塊內使用,而sleep()到處都可以用。

wait()和sleep()最大的區別:sleep()不釋放物件鎖,而wait()會釋放,。因此從效率方面考慮wait()方法更好

★ 同步設計的基本原則

◎ 同步塊中(synchronized修飾)的**越小越好!

◎ 同步塊中不要寫阻塞性**(如,inputstream.read() )!

◎ 在持有鎖的時候,不要對其它物件呼叫方法。(如果做到,可以消除最常見的死鎖源頭。)

★ 同步概述

◎同步的原理:將需要同步的**進行封裝,並在該**上加了乙個鎖。

◎同步的好處:解決多執行緒的安全問題。

◎同步的弊端:會降低效能。

◎同步的前提:必須要保證有多個執行緒且它們在同步中使用的是同乙個鎖。

Java併發 多執行緒

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

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

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

Java多執行緒與併發 Java鎖

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