java 多線程 一個博客

http://blog.csdn.net/a352193394/article/category/2563875java

 

Java多線程之~~~線程安全容器的非阻塞容器

在併發編程中,會常常遇到使用容器。可是若是一個容器不是線程安全的,那麼他在多線程的插入或者刪除的過程 中就會出現各類問題,就是不一樣步的問題。因此JDK提供了線程安全的容器,他能保證容器在多線程的狀況下安全的插 入和刪除。固然,線程安全的容器分爲兩種,第一種爲非阻塞似的,非阻塞的意思是當請求一個容器爲空或者這個請求 不能執行的時候,就會報出異常,第二種阻塞的意思是,不能執行的命令不會報出異常,...
 
 

Java多線程之~~~Fork/Join框架的同步和異步

在Fork/Join框架中,提交任務的時候,有同步和異步兩種方式。之前使用的invokeAll()的方法是同步的,也就是任 務提交後,這個方法不會返回直到全部的任務都處理完了。而還有另外一種方式,就是使用fork方法,這個是異步的。也 就是你提交任務後,fork方法當即返回,能夠繼續下面的任務。這個線程也會繼續運行。 下面咱們以一個查詢磁盤的以log結尾的文件的程序例子來講明異步的用法...
 
 

使用Java7提供的Fork/Join框架

在Java7中,JDK提供對多線程開發提供了一個很是強大的框架,就是Fork/Join框架。這個是對原來的Executors更 進一步,在原來的基礎上增長了並行分治計算中的一種Work-stealing策略,就是指的是。當一個線程正在等待他建立的 子線程運行的時候,當前線程若是完成了本身的任務後,就會尋找尚未被運行的任務而且運行他們,這樣就是和 Executors這個方式最大的區別,更加有...
 
 

Java多線程~~~ScheduledThreadPoolExecutor 計劃任務類的使用

前面咱們已經學習了使用ThreadPoolExecutor類來實現自動建立和運行線程。可是na'xie...
 
 

Java多線程之~~~Callable接口得到返回值

ThreadPoolExecutor提供了另外一個很是強有力的接口,那就是callable。這個接口和runnable相似,可是實現這個 接口的方法是call方法,這個方法是能夠返回值的,彌補了runnable不能返回值的悲哀。並且這個方法能夠配合ThreadP oolExecutor使用,得到Future接口,從這個接口的名字咱們就能知道,返回的這個相似於指向這個線程的一個指針,我 們能經過...
 
 

Java多線程之~~~使用ThreadPoolExecutor來建立線程

之前咱們建立線程的時候都是主動的new一個Thread,而後調用他們的start方法,可是若是線程很是多,任務也非 常多的時候,這樣寫就會顯得很是麻煩,固然可能效率也不是很高,Java給咱們提供了叫線程建立器這個樣概念的類, 他能夠幫助咱們管理這些線程,你作的就是編寫好代碼,而後交給他,她就會自動幫你運行。 固然,帶cache的threadpool 對於死掉的線程從新調用,在性能上也會有很是...
 
 

Java多線程之~~~使用Exchanger在線程之間交換數據

在多線程中,兩個線程之間交換數據是很是常見的狀況,咱們可使用公共的數據結構,一樣,Java也提供了很好 的類供咱們使用,那就是Exchanger類,這個類能夠幫助咱們在兩個線程之間同步數據結構,下面咱們以這個類再來實 現一遍生產者消費者模型,貌似這個模型已經被寫爛了。 package com.bird.concursey.charpet5; import java.util.Li...
 
 

Java多線程之~~~Phaser重寫onAdvance方法

在Phaser類中,咱們在每一個線程中,每一個線程進行完一個階段完成後都會等待其餘線程完成後再一塊兒進行,當所 有線程都完成了一個任務的時候,會調用Phaser的onAdvance方法,若是咱們想在每一個階段,全部線程都完成他們的階 段工做後作點啥事的話,那就得繼承Phaser類來重寫Onadvance這個方法來實現咱們的目的,下面咱們用一個例子來講 明,例子就是模擬多個學生考試,考試分爲三個階段,...
 
 

Java多線程之~~~Phaser類實現任務的同步

在多線程開發中,常常會碰到將多個任務分配給多個線程,每一個線程執行他的任務,可是,每一個任務又分爲好幾個 階段,每一個階段指望各個線程同時達到,意思是,每一步每一個線程都要同步,當有一個線程走完第一步的時候,他得等 待其餘的線程都完成第一步了才能繼續下一步,步調一致能解決不少問題。下面咱們使用一個例子,這個例子是模擬遍 歷機器上的一些文件,找出以log結尾的文件,而且他的最後修改時間爲24小時之內,...
 
 

Java多線程之~~~CyclicBarrier 類的使用

上一節說了CountDown的使用方法,對於用來同步多個線程之間的協做關係,Java更提供了更加高級的方法來實 現,這個類就是CyclicBarrier。 它能夠實現當多個分支線程完成他們的工做後,調用await方法來等待,而後等全部的分 支線程工做完畢後,會自動的調用主線程的run方法,這個主線程是一個實現runnable接口的類,在CyclicBarrier實例化 的時候就調用了。 下...
 

ava多線程之~~~使用CountDownLatch來同步多個線程實現一個任務

在多線程開發中,常常會遇到這樣的問題,好比,一個線程須要其餘的一些輔助線程完成指定的一些任務後才能開 啓。 相似於一個主線程正在運行,他須要其餘分支線程完成一些任務後才能激活他來啓動剩下的任務,這裏就可使用 Java自帶的CountDownLatch這個類來幫咱們實現這樣的效果。   這個類初始化的時候會指定一個數字,這就是須要等 待的資源的數量,每個資源到位的時候,就調用他的count...
 
 

Java多線程~~~使用信號量來控制資源獲取

在多線程開發中,有一個很經典的名詞,那就是信號量。信號量就是用來衡量一個資源的可利用數目的,根據信號 量的多少來控制在多線程中各個資源之間的衝突問題,在Java中也提供了對信號量的支持。 並且在建立信號量的時候,第二個參數用來指定採起何種分配策略,好比當有不少線程被阻塞,但有一個機會的時 候,信號量應該選擇誰去運行呢,若是選擇true,就採用公平模式,到時候看哪一個線程等待的時間最久,...
 
 

Java多線程開發之~~~多條件Condition接口的使用

咱們在多線程開發中,可能會出現這種狀況。就是一個線程須要另一個線程知足某某條件才能繼續運行,或者需 要其餘線程知足好幾個條件才能運行,對於這樣的多條件的多線程併發,咱們如何控制好各個線程之間的關係,使他們 能很好的處理衝突不至於相互出現問題呢,下面咱們來介紹一下Java提供的Condition這個接口,這個接口很好的實現了 這種需求。 對於這個問題最經典的例子就是生產者消費者模型,生產者...
 
 

Java多線程之~~~ReadWriteLock 讀寫分離的多線程實現

在多線程開發中,常常會出現一種狀況,咱們但願讀寫分離。就是對於讀取這個動做來講,能夠同時有多個線程同 時去讀取這個資源,可是對於寫這個動做來講,只能同時有一個線程來操做,並且同時,當有一個寫線程在操做這個資 源的時候,其餘的讀線程是不能來操做這個資源的,這樣就極大的發揮了多線程的特色,能很好的將多線程的能力發揮 出來。 在Java中,ReadWriteLock這個接口就爲咱們實現了這個需求...
 
 

Java多線程之~~~Lock接口和ReentrantLock的使用

在多線程開發中,除了synchronized這個關鍵字外,咱們還能經過Lock接口來實現這種效果。經過Lock接口來實現 這種多線程加鎖效果的好處是很是的靈活,咱們不在須要對整個函數加鎖,並且能夠很方便的把他放在咱們函數的任何 一個地方,很是的趁心,並且從效率上來講,使用Lock接口要比使用synchronized關鍵字效率高一些,下面咱們來使用 一個例子來講明這種方法的使用。 p...
 
 

Java多線程之~~~~使用wait和notify實現生產者消費者模型

在多線程開發中,最經典的一個模型就是生產者消費者模型,他們有一個緩衝區,緩衝區有最大限制,當緩衝區滿 的時候,生產者是不能將產品放入到緩衝區裏面的,固然,當緩衝區是空的時候,消費者也不能從中拿出來產品,這就 涉及到了在多線程中的條件判斷,java爲了實現這些功能,提供了wait和notify方法,他們能夠在線程不知足要求的時候 讓線程讓出來資源等待,當有資源的時候再notify他們讓他們繼續...
 
 

Java多線程之~~~synchronized添加參數來實現獨立的代碼片斷

有時候咱們並不想在整個方法前面加上synchronized這個關鍵字,這樣會使整個方法調用變的緩慢,咱們只在關鍵 代碼的地方增長這個synchronized這個關鍵字,而後這樣就能加快方法或者代碼的執行效率。而後可能還有一種狀況就 是,咱們有兩個變量,其中任何一個變量都是同時只能一個變量訪問,可是兩個變量能夠在同時被兩個變量訪問,這種 需求下咱們就得使用sychronized的帶參數的方法來...
 
 

Java多線程之~~~~synchronized 方法

在多線程開發中,總會遇到多個在不一樣線程中的方法操做同一個數據,這樣在不一樣線程中操做這個數據不一樣的順序 或者時機會致使各類不一樣的現象發生,以致於不能實現你預期的效果,不能實現一致性,這時候就可使用 synchronized關鍵字對一個方法來講,這個synchronized能保證全部調用這個方法的線程只有一個正在操做這個方法, 不會出現同時多個線程進入這個方法的狀況,下面咱們來一個例子說明這個...
 
 

Java多線程之-----實現本身的ThreadFactory

工廠模式是最經常使用的模式之一,在建立線程的時候,咱們固然也能使用工廠模式來生產Thread,這樣就能替代默 認的new THread,並且在自定義工廠裏面,咱們能建立自定義化的Thread,而且計數,或則限制建立Thread的數量, 給每一個Thread設置對應的好聽的名字,或則其餘的不少不少事情,總之就是很爽,下面咱們來展現一個簡單的Thread 工廠模式來建立本身的Thread。 ...
 
 

Java多線程之---ThreadGroup 管理Thread

當建立了好幾個線程的時候,不少線程的工做任務是相似或者一致的,這樣咱們就可使用ThreadGroup來管理他 們,ThreadGroup能夠隨時的獲取在他裏面的線程的運行狀態,信息,或者一條命令關閉掉這個group裏面的全部線 程,很是的簡單實用,下面咱們用一個例子來講明一下如何使用。 package com.bird.concursey; import java.util.Da...
 

Java 多線程之--ThreadLocal 簡介

在多線程開發中,常常會碰見在run方法裏面調用一個公共的屬性的事情,因爲每次start都會建立一個線程,所以全部的線程共享一個屬性,當其中任何一個線程更改了這個屬性的值,這個屬性在下面的使用過程當中都會被改變,這回致使不少不指望發生的事情發生,這就叫作線程不安全的。先來一個例子說明這個問題。 package com.bird.concursey; import java.util.Date;...
 
 

Java 多線程之-----守護進程

守護進程,顧名思義就是默默在後臺運行的進程,當JVM上沒有其餘進程運行時運行的進程,最典型的一個列子就是 JVM自帶的垃圾清理機,他就是在其餘程序不運行的時候佔用CPU來進行清理內存垃圾,所以他具備很強的不肯定性, 由於你不知道啥時候他就會運行,也不知道啥時候他不會運行,所以適合作一個不過重要的清理工做或者服務器上的監 聽工做。 下面咱們使用JVM的daemon來寫一個小例子,實現的效果如...
 
 

Java 多線程之--- Thread.join介紹

許久許久沒有寫過博客了,之前上班老是沒有時間,可是總感受寫博客仍是很好的一種記錄本身技術進程的一種方式 因而在辭職後來到北軟,又一次上學了,又一次有時間來寫博客了,因此再次開始寫博客了,呵呵,再次當學生的感受 真好!!!!    此次說的是Thread的join方法,之前老是使用他的run和sleep方法,哪兩個都是比較清楚的,對於這個join方法,他的 主要功能就是,當你在一個方...
相關文章
相關標籤/搜索