學習地址:狂神Bilibili個人主頁 1.什么是自學鎖? 是指當一個線程在獲取鎖的時候,如果鎖已經被其它線程獲取,那么該線程將循環等待,然后不斷的判斷鎖是否能夠被成功獲取,直到獲取到鎖才會退出循環。 2.使用場景 就像…
分類:JUC
volatile禁止指令重排理解和例子說明
計算機在執行程序時,為了提高性能,編譯器和處理器常常會對指令做重排,一般分一下3種: 源代碼 -> 編譯器優化的重排 -> 指令并行的重排 -> 內存系統的重排 -> 最終執行的指令 單線程環境里…
Java并發編程的藝術 -- 線程池和Executor框架(第九、十章)
文章目錄 1、線程池 1.1、為什么使用線程池? 1.2、線程池的實現原理 1.3、excute()方法源碼分析 1.4、工作線程 1.5、線程池的創建 1.6、execute()和submit()方法 1.7、關閉線程…
Java 中的活鎖,死鎖,饑餓有什么區別?
死鎖:是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一 種互相等待的現象,若無外力作用,它們都將無法推進下去,此時稱系統處于 死鎖狀態或系統產生了死鎖。 饑餓:考慮一臺打印機分配的例子,當有多個進程需要打印文件…
詳解volatile關鍵字和原子引用
本篇看一下Volatile關鍵字和原子引用。 詳解volatile關鍵字和原子引用 上圖就是JUC包結構,總共分成三塊 (1)java.util.concurrent:并發包基礎類,包括阻塞隊列,線程池相關類,線程安全M…
序列化和反序列化總結
簡介 對象的序列化 如上圖,我們把一個Person對象以流的方式,寫入到文件中保存,叫寫對象,也叫對象序列化,對象中包含的不僅僅是字符,使用字節流。 ObjectOutputStream:對象的序列化流 對象序列化的最主…
Java提高——JUC線程實現Callable接口和Lock鎖
實現Callable接口(實現線程的第三種方式) Java 5.0 在java.util.concurrent提供了一個新的創建執行線程的方式:Callable接口 Callable接口類似于Runnable,兩者都是為…
JUC學習之生產者消費者案例-Lock-Condition線程通信
本文是看視頻學習筆記,若有錯誤請指正! 生產者消費者案例的lock寫法 其中涉及到了Condition的用法,簡答的介紹一下: 1.Condition接口描述了可能會與鎖相關的條件變量,這些變量在用法上與使用Object…
JUC源碼分析-JUC鎖(六):StampedLock
1. 概述 StampedLock是JDK 8新增的讀寫鎖,跟其他同步鎖不同,它并不是由AQS實現的。它是一個基于能力(capability-based)的鎖,提供了三種模式來控制 read/write 的獲取,并且內部…
《java并發編程實戰》讀書筆記4--基礎構建模塊,java中的同步容器類&并發容器類&同步工具類,消費者模式,Java多線程系列--“JUC鎖”11之 Semaphore信號量的原理和示例,
上一章說道委托是創建線程安全類的一個最有效策略,只需讓現有的線程安全的類管理所有的狀態即可。那么這章便說的是怎么利用java平臺類庫的并發基礎構建模塊呢? 5.1 同步容器類 包括Vector和Hashtable,此外還…