Java的高併發程式設計系列(三)

2021-08-17 19:03:55 字數 822 閱讀 5401

鎖定某物件o,如果o的屬性發生改變,不影響鎖的使用,但是如果o變成另外乙個物件,則鎖定的物件發生改變,應該避免將鎖定物件的引用變成另外乙個物件。

public

class demo17 catch (interruptedexception e)

system.out.println(thread.currentthread().getname());}}

}public

static

void

main(string args) catch (interruptedexception e)

//啟動第二個執行緒

thread t2 = new thread(demo17 :: test, "t2");

demo17.o = new object(); //所物件發生改變,所以t2執行緒得以執行,如果注釋掉這句話,執行緒t2將永遠得不到執行機會

t2.start();

}}

不要以字串常量作為鎖定的物件

在下面的例子中,test1和test2其實鎖定的是同乙個物件

這種情況還會發生比較詭異的現象,比如你用到了乙個類庫,在該類庫中**鎖定了字串」hello」,

但是你讀不到原始碼,所以你在自己的**中也鎖定了」hello」,這時候就有可能發生非常詭異的死鎖阻塞, 因為你的程式和你用的的類庫不經意間使用了同一把鎖。

public

class

demo18

}public

void

test2()

}}

實戰Java高併發程式設計(三)JDK並發包

同步控制 重入鎖 重入鎖可以完全替代synchronized關鍵字。其使用方法如下 public reentrantlock lock new reentrantlock public void run finally 由於其通過人工進行lock和unlock,因此比synchronized更好控制...

Java高併發程式設計筆記

jmm記憶體模型之 可見性 可見性是指當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改。jmm記憶體模型之 有序性 有序性問題的原因是因為程式在執行時,可能會出現指令重排,重排後的指令的順序未必一致。一條指令的執行可以分為很多步驟的 簡單來說就是以下幾步 1 取指if 2 解...

Java併發程式設計系列 CountDownLatch

countdownlatch簡介 countdownlatch是基於aqs實現的乙個執行緒同步工具,也稱為閉鎖。它的作用是讓乙個或者多個執行緒等待某個事件的發生。簡單的理解為countdownlatch有乙個正數計數器,countdown方法對計數器做減操作,await方法等待計數器達到0。所有aw...