java併發程式設計筆記
這裡只是用於記錄我學習java併發程式設計過程中的一些心得和重要的知識點.
1:volatile通常被當做表示完成,中斷,狀態的標記,但是不足以使自增操作原子化(實測,不行),加鎖可以保證原子性和可見性,但是volatile只能保證可見性.
2:在沒有同步的操作中,執行緒進行讀取變數,很有可能讀取的是一個過期的量,但是這個量是過程中某個執行緒實際得出的值,而不是一個憑空而來的值,這樣的保證稱為"最低限的安全性",但是對於沒有宣告volatile的64位的long和double變數來說,是不行的,這個jvm對64位double和long變數的操作有關,你可能會得到一個憑空的數.
3:不可變物件的理解:一開始我並不能理解併發中使用不可變物件,如果不可變,那麼我使用這個物件是為了什麼呢?但是後來我理解了,這個不可變並不是真的不可變,將他宣告為不可變的物件,只是為了不讓別的執行緒修改這個物件,但是有一點是要宣告的,物件不可變並不等於指向這個物件的引用不可變,一旦一個執行緒獲得了一個不可變物件的引用,就不用擔心這個物件被改變,當改變這個引用以完成任務時,在通過宣告為volatile來通知其他執行緒,這樣就完成了同步.
相關推薦
java併發程式設計筆記
這裡只是用於記錄我學習java併發程式設計過程中的一些心得和重要的知識點. 1:volatile通常被當做表示完成,中斷,狀態的標記,但是不足以使自增操作原子化(實測,不行),加鎖可以保證原子性和可見性,但是volatile只能保證可見性. 2:在沒有同步的操作中,執行緒
【轉】Java併發程式設計筆記之CopyOnWriteArrayList原始碼分析
併發包中併發List只有CopyOnWriteArrayList這一個,CopyOnWriteArrayList是一個執行緒安全的ArrayList,對其進行修改操作和元素迭代操作都是在底層建立一個拷貝陣列(快照)上進行的,也就是寫時拷貝策略。 我們首先看一下CopyOnW
Java併發程式設計筆記4-執行緒池
我們使用執行緒的時候就去建立一個執行緒,但是就會有一個問題: 如果併發的執行緒數量非常多,而且每個執行緒都是執行一個時間很短的任務就結束了,這樣頻繁建立執行緒就會導致大大降低系統的效率,因為頻繁建立執行緒和銷燬執行緒需要時間。那麼有沒有一種辦法使得執行緒可以複用,就是執行完
java併發程式設計筆記day1
第三章 共享物件 3.1 可見性 在沒有同步的情況下共享變數,可能會導致一直迴圈,並且有可能發生重排序,列印結果為0。 public class NoVisibility { private static boolean ready;
java併發程式設計筆記----釋出與逸出
開發十年,就只剩下這套架構體系了! >>>
Java併發程式設計筆記——J.U.C之collections框架:ConcurrentLinkedQueue
一:ConcurrentLinkedQueue簡介 ConcurrentLinkedQueue是執行緒安全的無界非阻塞佇
Java併發程式設計筆記——J.U.C之executors框架:ScheduledThreadPoolExecutor
一、ScheduledThreadPoolExecutor簡介 在executors框架設計理念 一節中,我們曾經提到過一種可
Java併發程式設計筆記——J.U.C之executors框架:ThreadPoolExecutor
一、ThreadPoolExecutor簡介 在J.U.C之executors框架:executors框架設計理念的章節中
Java併發程式設計筆記——J.U.C之executors框架:executors框架設計理念
一、executors框架簡介 juc-executors框架是整個J.U.C包中類/介面關係最複雜的框架,真正理解exe
讀書筆記(java併發程式設計實戰——CompletionService)
原文請參考微信公眾號(歡迎關注公眾號:coding_song):https://mp.weixin.qq.com/s/R50Eh4kTDtA031i-yMUZAw Callable&Future Callbale描述的是抽象的計算任務,有明確的起點,並且最終會結束
Java併發程式設計實戰 - 學習筆記
第2章 執行緒安全性 1. 基本概念 什麼是執行緒安全性?可以這樣理解:一個類在多執行緒環境下,無論執行時環境怎樣排程,無論多個執行緒之間的執行順序是什麼,且在主調程式碼中不需要進行任何額外的同步,如果該類都能呈現出預期的、正確的行為,那麼該類就是執行緒安全的。 既然這樣,那麼安
《java併發程式設計實戰》筆記(一) 結構化併發應用程式
下載地址 連結:https://pan.baidu.com/s/1i6FlscH 密碼:m21n 1.任務執行 任務是一組邏輯執行單元,執行緒是使得任務非同步執行的機制 不可取的所謂執行緒開啟的方式: 1.所有任務放在單個執行緒中序列執行 2.每一個任務都開啟一個執行緒,無限
Java併發程式設計讀書筆記(一)
前幾天整理電腦檔案的時候,突然發現了之前還在kindle儲存了關於併發程式設計的書,剛好自己在這方面挺薄弱的,故整理一波讀書筆記,繼續加強學習。 1.上下文切換 1.1 時間片分配演算法 時間片是CPU分配給各個執行緒的時間,CPU通過不停地切換執行緒執行,使各個執行緒彷彿是”同
《java併發程式設計的藝術》筆記第一章
第一章併發程式設計的挑戰 目錄 第一章併發程式設計的挑戰 第一章併發程式設計的挑戰 1.1上下文切換 1.2 死鎖 避免死鎖的幾個常見方法 1.3 資源限制的挑戰 個人總結 第一章併發程式設計的挑戰 1.1上下文切換
[轉] 《Java併發程式設計的藝術》筆記
第一章 併發程式設計的挑戰 略 第二章 Java併發機制的底層實現原理 volatile的兩條實現原則: Lock字首指令會引起處理器快取回寫到記憶體 一個處理器的快取回寫到記憶體會導致其他處理器的快取無效。 volatile的使用優化:共享變數會被頻
《Java併發程式設計實戰》筆記3——執行緒池的使用
1、執行緒飢餓死鎖 線上程池中,如果任務依賴於其他任務,那麼可能發生死鎖。在單執行緒的Executor中,如果一個任務將另一個任務提交到同一個Executor,並且等待這個被提交任務的結果,那麼通常會引發死鎖。 如下面程式碼所示: public class Thread
Java併發程式設計藝術讀書筆記
1、多執行緒在CPU切換過程中,由於需要儲存執行緒之前狀態和載入新執行緒狀態,成為上下文切換,上下文切換會造成消耗系統記憶體。所以,可合理控制執行緒數量。 如何控制: (1)使用ps -ef|grep appname,查詢appname的pid;如1111 (2)使用jstack 1111 >
[讀書筆記][Java併發程式設計實戰]第二章 執行緒安全性
第二章 執行緒安全性 1-什麼是執行緒安全的類? 當多個執行緒訪問某一個類時,不管執行時環境採用何種排程方式或者這些執行緒將如何交替執行,並且在主調程式碼中不需要任何額外的同步或協同,這個
《Java併發程式設計的藝術》筆記五——Java執行緒基礎.md
0.執行緒的狀態 名稱 說明 New 即執行緒剛剛建立,而並未執行 Runnable 執行狀態,Java執行緒將作業系統中的就緒和執行兩種狀態籠統的稱作“執行中” Blocked 阻塞狀態,表示執行緒阻塞於鎖 Waiting 等待狀態,表示執行緒進入等待狀態,需要等待其他執行
《Java併發程式設計的藝術》筆記四——Java如何實現原子操作.md
在Java中可以通過鎖和迴圈CAS的方式實現原子操作。 注:CAS(比較與交換,Compare and swap) 是一種有名的無鎖演算法。CAS的語義是“我認為V的值應該為A,如果是,那麼將V的值更新為B,否則不修改並告訴V的值實際為多少”,CAS是一種 樂觀鎖 技術,當多個執行緒