1. 程式人生 > >Java高效能程式設計實戰

Java高效能程式設計實戰

1 虛假的執行緒中止- Stop

Stop:中止執行緒,並且清除監控器鎖的資訊,但是可能導致執行緒安全問題,JDK不建議用。 Destroy: JDK未實現該方法

  • 理想輸出 i=0 j=0
  • 程式執行結果

沒有保證同步程式碼塊裡面資料的一致性,破壞了執行緒安全

2 真正的執行緒終止

2.1 interrupt

如果目標執行緒在呼叫Object class 的

  • wait()
  • wait(long)
  • wait(long, int)

或者Thread類的

  • join()

  • join(long, int)

  • sleep(long, int)

時被阻塞,那麼Interrupt

會生效, 該執行緒的中斷狀態將被清除,拋InterruptedException

如果目標執行緒是被I/O或者NIO中的Channel所阻塞,同樣,I/O操作會被中斷或者返回特殊異常值。達到終止執行緒的目的。

如果以上條件都不滿足,則會設定此執行緒的中斷狀態。 對於上面的示例

  • stop改成interrupt
  • 最終輸出為“i=1 j=1”,資料一致

2.2 標誌位

  • 即程式碼中,增加一個判斷,來控制執行緒執行的中止

    相關推薦

    Java高效能程式設計實戰

    1 虛假的執行緒中止- Stop Stop:中止執行緒,並且清除監控器鎖的資訊,但是可能導致執行緒安全問題,JDK不建議用。 De

    Java高效能程式設計實戰 --- 執行緒封閉與ThreadLocal

    1 執行緒封閉 多執行緒訪問共享可變資料時,涉及到執行緒間資料同步的問題。並不是所有時候,都要用到 共享資料,所以執行緒封閉概念就

    JAVA併發程式設計實戰》避免活躍性危險

    文章目錄 死鎖 鎖順序死鎖 動態的鎖順序死鎖 在協作物件之間發生的死鎖 開放呼叫 資源死鎖 死鎖的避免和診斷 支援定時的鎖 使用執行緒轉儲資訊來分析死鎖 其他活躍性危

    JAVA併發程式設計實戰》取消和關閉

    文章目錄 引言 任務取消 中斷 中斷策略 響應中斷 示例:計時執行 通過Future來實現取消 處理不可中斷的阻塞 採用newTaskFor封裝非標準的取消 停止基於執行緒的服務

    JAVA併發程式設計實戰》任務執行

    文章目錄 線上程中執行任務 序列執行任務 顯式的為任務建立執行緒 無限制建立執行緒的不足 Executor框架 示例:基於Executor的Web伺服器 執行策略 執行緒池 Exe

    JAVA併發程式設計實戰》基礎構建模組

    文章目錄 同步容器類 同步容器類的問題 迭代器和ConcurrentModificationException 隱藏迭代器 併發容器 ConcurrentHashMap 額外的原子Map操作

    JAVA併發程式設計實戰》物件的組合

    文章目錄 設計執行緒安全的類 找出構成物件狀態的所有變數 示例 找出約束狀態變數的不變性條件 例項封閉 java監視器模式 示例:車輛追蹤 執行緒安全性的委託

    java併發程式設計實戰】—–執行緒基本概念

    轉自 http://cmsblogs.com/?p=1638 共享和可變 要編寫執行緒安全的程式碼,其核心在於對共享的和可變的狀態進行訪問。 “共享”就意味著變數可以被多個執行緒同時訪問。我們知道系統中的資源是有限的,不同的執行緒對資源都是具有著同等的使用權。有限、公平就意味著競爭

    讀書筆記(java併發程式設計實戰——CompletionService)

    原文請參考微信公眾號(歡迎關注公眾號:coding_song):https://mp.weixin.qq.com/s/R50Eh4kTDtA031i-yMUZAw    Callable&Future Callbale描述的是抽象的計算任務,有明確的起點,並且最終會結束

    Java併發程式設計實戰 - 學習筆記

    第2章 執行緒安全性 1. 基本概念 什麼是執行緒安全性?可以這樣理解:一個類在多執行緒環境下,無論執行時環境怎樣排程,無論多個執行緒之間的執行順序是什麼,且在主調程式碼中不需要進行任何額外的同步,如果該類都能呈現出預期的、正確的行為,那麼該類就是執行緒安全的。 既然這樣,那麼安

    Java併發程式設計實戰:閉鎖CountDownLatch,柵欄CyclicBarrier與訊號量Semaphore

    整體上對三個概念進行一個說明: CountDownLatch和CyclicBarrier都能夠實現執行緒之間的等待,只不過它們側重點不同: CountDownLatch是閉鎖,相當於一扇門:在閉鎖達到結束狀態之前,這扇門一直是關閉的,並且沒有任何執行緒能夠通過,當到達結束

    Java併發程式設計實戰————Semaphore訊號量的使用淺析

    引言 本篇部落格講解《Java併發程式設計實戰》中的同步工具類:訊號量 的使用和理解。 從概念、含義入手,突出重點,配以程式碼例項及講解,並以生活中的案例做類比加強記憶。 什麼是訊號量 Java中的同步工具類訊號量即計數訊號量(Counting Semaphore),是

    Java併發程式設計實戰————物件的組合

    引言 物件的組合,是《Java Concurrency in Practice》中第四章引入的課題。這並不是一個併發的概念。 為了可以將現有的執行緒安全元件組合為更大規模的元件或程式,而不是每次記憶體訪問都進行分析以確保程式是執行緒安全的。這一章將介紹一些組合模式,這些模式可以更容易的使

    Java併發程式設計實戰————售票問題

    引言 現有一個需求如下: 有10000張火車票,每張票都有一個編號,同時有10個視窗對外售票,如何確保車票的正常售賣? 程式一:使用List 問題的解決辦法都是從我們最最熟悉的角度思考。程式一,我們使用一個普通的List作為方案。 閱讀以下程式碼,觀察執行結果: publ

    Java併發程式設計實戰————ThreadLocal

    一、引言 ThreadLocal是Java幫助實現執行緒封閉性的典型手段。 作用:提供執行緒內的區域性變數,這種變數線上程的生命週期內起作用,減少同一個執行緒內多個函式或元件之間一些公共變數的傳遞複雜度。同時也用來維護執行緒中的變數不被其他執行緒干擾。 這個類能使執行緒中的某個值與儲

    java併發程式設計實戰》之 物件共享

    解決問題: 如何共享和釋出物件,從而使它們能夠安全地由多個執行緒同時訪問 寫多執行緒注意兩點 防止某個執行緒正在使用物件狀態時,而另一個執行緒同時在修改狀態。 確保當一個執行緒修改了物件狀態後,其他執行緒能夠看到狀態變化。(同步的記憶體可見性) 1.可見性

    java併發程式設計實戰》之 執行緒安全性

    1.執行緒安全性 當多個執行緒訪問某個類時,不管執行時環境採用何種排程方式或者這些執行緒將如何交替執行,並且在主調程式碼中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那麼這個類就是執行緒安全的。 無狀態物件一定是執行緒安全的,何為無狀態,就是類中不包含任何域,也不包含各種其

    java併發程式設計實戰》筆記(一) 結構化併發應用程式

    下載地址 連結:https://pan.baidu.com/s/1i6FlscH 密碼:m21n 1.任務執行 任務是一組邏輯執行單元,執行緒是使得任務非同步執行的機制 不可取的所謂執行緒開啟的方式: 1.所有任務放在單個執行緒中序列執行 2.每一個任務都開啟一個執行緒,無限

    Java併發程式設計實戰————ReentrantLock

    可替代synchronized的手動鎖  ReentrantLock是Lock介面的一個實現,可以用於替代synchronized。 使用ReentrantLock可以完成類似synchronize

    Java併發程式設計實戰》筆記3——執行緒池的使用

    1、執行緒飢餓死鎖 線上程池中,如果任務依賴於其他任務,那麼可能發生死鎖。在單執行緒的Executor中,如果一個任務將另一個任務提交到同一個Executor,並且等待這個被提交任務的結果,那麼通常會引發死鎖。 如下面程式碼所示: public class Thread