java併發程式設計的一些小記錄之interrupt
當外部執行緒對某執行緒呼叫了thred.interrupt()方法後,java語言的處理機制是這樣的:如果該執行緒處在可中斷狀態下(呼叫了Thread.wait()或者Thread.sleep()等特定會發生阻塞的api),那麼該執行緒會立即被喚醒,同時會收到一個InterruptedException,同時,如果是阻塞在IO上,對應的資源會被關閉。如果該執行緒接下來不執行Thread.interrupted()方法(不是interrupt),那麼該執行緒在處理任何IO資源的時候,都會導致這些資源的關閉。當然,解決的辦法就是呼叫一下interrupted(),不過這裡需要程式設計師自行根據程式碼的邏輯來設定,根據自己的需求確認是否可以直接忽略該中斷,還是應該馬上退出。
相關推薦
java併發程式設計的一些小記錄之interrupt
當外部執行緒對某執行緒呼叫了thred.interrupt()方法後,java語言的處理機制是這樣的:如果該執行緒處在可中斷狀態下(呼叫了Thread.wait()或者Thread.sleep()等特定會發生阻塞的api),那麼該執行緒會立即被喚醒,同時會收到一個Inter
java併發程式設計(六)之讀寫鎖
一、讀寫鎖我們知道在多個執行緒訪問同一個資料的時候是存線上程安全問題的,而在僅僅是讀取資料的時候,是沒有安全問題的,那麼多個執行緒同時讀取資料我們就可以讓其不互斥;而多個執行緒都在修改(寫)資料或有的在讀取有的在寫入的時候再讓其互斥,這樣不但保證執行緒安全而且提高效能。Rea
Java併發程式設計-同步輔助類之CountDownLatch
操作方法建構函式CountDownLatch(int count),count表示要等待的運算元的數目。await()方法,阻塞等待,需要其他執行緒完成期待的操作,直到count為0。countDown()方法,當某一個操作完成後,呼叫此方法,count數減一。CountDo
java併發程式設計(十)之執行緒倒計數鎖存器CountDownLatch
一、定義一個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許一個或多個執行緒一直等待。用給定的計數 初始化 CountDownLatch。由於呼叫了 countDown() 方法,所以在當前計數到達零之前,await 方法會一直受阻塞。之後,會釋放所有等待的執行緒
Java併發程式設計--多執行緒之HelloWorld
上篇部落格我們介紹了一些基本概念,程序、執行緒、併發。下面我們開始寫第一個多執行緒的程式。 兩種方式:一、實現Runnable介面;二、基礎Thread類。 一、實現Runnable介面 pack
JAVA 併發程式設計-讀寫鎖之模擬快取系統(十一)
在多執行緒中,為了提高效率有些共享資源允許同時進行多個讀的操作,但只允許一個寫的操作,比如一個檔案,只要其內容不變可以讓多個執行緒同時讀,不必做排他的鎖定,排他的鎖定只有在寫的時候需要,以保證別
Java併發程式設計-同步輔助類之CyclicBarrier
在上一篇文章中我們介紹了同步輔助類CountDownLatch,在Java concurrent包下還有另一個同步輔助類CyclicBarrier與CountDownLatch非常類似,它也允許多個執行緒在某個點進行同步,但CyclicBarrier類更加強大。CyclicB
java併發程式設計之利用CAS保證操作的原子性
import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; public class Counter { private AtomicInteger at
Java併發程式設計之CyclicBarrier
CyclicBarrier可以控制這樣的場景: 對多個執行緒,他們執行自己程式碼(執行run方法)的時間不一樣; 比如有3個執行緒,其run方法執行時間分別為1s, 2s, 3s。如果我們想在三個執行緒都完成自己的任務時執行相應的操作,CyclicBarrier就派上用場了。 寫了一
Java併發程式設計的藝術之十----Executor框架
1.Executor框架 1.1兩級排程模型 Java執行緒啟動時候會建立一個本地作業系統執行緒,當該java執行緒終止時,這個作業系統執行緒也會被回收。作業系統會排程所有執行緒並分配cpu。 上層,多執行緒程式通常把應用分解成若干個任務,然後Executor將任務對映為固定數量的
Java併發程式設計的藝術之九----執行緒池
第一:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 第二:提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。 第三:提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源, 還會降低系統的穩定性,使用執行緒池可以進行統
Java併發程式設計的藝術之八----java中的併發工具類
1.等待多執行緒完成的countDownLatch CountDownLatch允許一個或多個執行緒等待其他執行緒完成操作。 執行緒中,讓一個執行緒等待最簡單的做法是使用join方法,執行緒A中呼叫B.join方法,說明讓執行緒A等待執行緒B完成之後再執行。 實現原理:不停檢查執行緒是否
Java併發程式設計的藝術之七----原子更新基本型別
1.原子更新基本型別 ·AtomicBoolean:原子更新布林型別。 ·AtomicInteger:原子更新整型。 ·AtomicLong:原子更新長整型 ·int addAndGet(int delta):以原子方式將輸入的數值與例項中的值(AtomicInteger裡的valu
Java併發程式設計的藝術之六----併發程式設計容器和框架
1.ConcurrentHashMap的實現原理與使用 ConcurrentHashMap是執行緒安全且高效的HashMap。 1.1為什麼要使用ConcurrentHashMap 併發程式設計中使用HashMap可能導致程式死迴圈(1.8解決了擴容和put成環),可能使的對HashMa
Java併發程式設計的藝術之五----java中的鎖
1.Lock介面 鎖是用來控制多個執行緒訪問共享資源的方式,一般來說,一個鎖能夠防止多個執行緒同時訪問共享資源(但是有些鎖可以允許多個執行緒併發的訪問共享資源,比如讀寫鎖)。Java SE 5之後,併發包中新增了Lock介面(以及相關實現類)用來實現鎖功能,在使用時需要顯式地獲取和釋放鎖。雖然它
Java併發程式設計之鎖機制之LockSupport工具
關於文章涉及到的jdk原始碼,這裡把最新的jdk原始碼分享給大家----->jdk原始碼 前言 在上篇文章《Java併發程式設計之鎖機制之AQS(AbstractQueuedSynchronizer)》中我們瞭解了整個AQS的內部結構,與其獨佔式與共享式獲取同步狀態的實現
Java併發程式設計之執行緒生命週期、守護執行緒、優先順序和join、sleep、yield
Java併發程式設計中,其中一個難點是對執行緒生命週期的理解,和多種執行緒控制方法、執行緒溝通方法的靈活運用。這些方法和概念之間彼此聯絡緊密,共同構成了Java併發程式設計基石之一。 Java執行緒的生命週期 Java執行緒類定義了New、Runnable、Running Man、Blocked和Dead
Java併發程式設計之執行緒安全、執行緒通訊
Java多執行緒開發中最重要的一點就是執行緒安全的實現了。所謂Java執行緒安全,可以簡單理解為當多個執行緒訪問同一個共享資源時產生的資料不一致問題。為此,Java提供了一系列方法來解決執行緒安全問題。 synchronized synchronized用於同步多執行緒對共享資源的訪問,在實現中分為同步程
Java併發程式設計之ThreadGroup
ThreadGroup是Java提供的一種對執行緒進行分組管理的手段,可以對所有執行緒以組為單位進行操作,如設定優先順序、守護執行緒等。 執行緒組也有父子的概念,如下圖: 執行緒組的建立 1 public class ThreadGroupCreator { 2 3 publi
Java併發程式設計之Exchanger
概述 用於執行緒間資料的交換。它提供一個同步點,在這個同步點,兩個執行緒可以交換彼此的資料。這兩個執行緒通過exchange方法交換資料,如果第一個執行緒先執行exchange()方法,它會一直等待第二個執行緒也執行exchange方法,當兩個執行緒都到達同步點時,這兩個執行緒就可以交換資料