上一節說了CountDown的使用方法,對於用來同步多個線程之間的協做關係,Java更提供了更加高級的方法來實 現,這個類就是CyclicBarrier。 它能夠實現當多個分支線程完成他們的工做後,調用await方法來等待,而後等全部的分 支線程工做完畢後,會自動的調用主線程的run方法,這個主線程是一個實現runnable接口的類,在CyclicBarrier實例化 的時候就調用了。 下...
在多線程開發中,常常會遇到這樣的問題,好比,一個線程須要其餘的一些輔助線程完成指定的一些任務後才能開 啓。 相似於一個主線程正在運行,他須要其餘分支線程完成一些任務後才能激活他來啓動剩下的任務,這裏就可使用 Java自帶的CountDownLatch這個類來幫咱們實現這樣的效果。 這個類初始化的時候會指定一個數字,這就是須要等 待的資源的數量,每個資源到位的時候,就調用他的count...
2014-09-22 09:38 閱讀(1766)
在多線程開發中,有一個很經典的名詞,那就是信號量。信號量就是用來衡量一個資源的可利用數目的,根據信號 量的多少來控制在多線程中各個資源之間的衝突問題,在Java中也提供了對信號量的支持。 並且在建立信號量的時候,第二個參數用來指定採起何種分配策略,好比當有不少線程被阻塞,但有一個機會的時 候,信號量應該選擇誰去運行呢,若是選擇true,就採用公平模式,到時候看哪一個線程等待的時間最久,...
2014-09-21 22:00 閱讀(1509)
咱們在多線程開發中,可能會出現這種狀況。就是一個線程須要另一個線程知足某某條件才能繼續運行,或者需 要其餘線程知足好幾個條件才能運行,對於這樣的多條件的多線程併發,咱們如何控制好各個線程之間的關係,使他們 能很好的處理衝突不至於相互出現問題呢,下面咱們來介紹一下Java提供的Condition這個接口,這個接口很好的實現了 這種需求。 對於這個問題最經典的例子就是生產者消費者模型,生產者...
2014-09-21 19:33 閱讀(1167)
在多線程開發中,常常會出現一種狀況,咱們但願讀寫分離。就是對於讀取這個動做來講,能夠同時有多個線程同 時去讀取這個資源,可是對於寫這個動做來講,只能同時有一個線程來操做,並且同時,當有一個寫線程在操做這個資 源的時候,其餘的讀線程是不能來操做這個資源的,這樣就極大的發揮了多線程的特色,能很好的將多線程的能力發揮 出來。 在Java中,ReadWriteLock這個接口就爲咱們實現了這個需求...
2014-09-19 23:25 閱讀(2783)
在多線程開發中,除了synchronized這個關鍵字外,咱們還能經過Lock接口來實現這種效果。經過Lock接口來實現 這種多線程加鎖效果的好處是很是的靈活,咱們不在須要對整個函數加鎖,並且能夠很方便的把他放在咱們函數的任何 一個地方,很是的趁心,並且從效率上來講,使用Lock接口要比使用synchronized關鍵字效率高一些,下面咱們來使用 一個例子來講明這種方法的使用。 p...
2014-09-19 22:29 閱讀(1434)
在多線程開發中,最經典的一個模型就是生產者消費者模型,他們有一個緩衝區,緩衝區有最大限制,當緩衝區滿 的時候,生產者是不能將產品放入到緩衝區裏面的,固然,當緩衝區是空的時候,消費者也不能從中拿出來產品,這就 涉及到了在多線程中的條件判斷,java爲了實現這些功能,提供了wait和notify方法,他們能夠在線程不知足要求的時候 讓線程讓出來資源等待,當有資源的時候再notify他們讓他們繼續...
2014-09-18 23:28 閱讀(2153)
有時候咱們並不想在整個方法前面加上synchronized這個關鍵字,這樣會使整個方法調用變的緩慢,咱們只在關鍵 代碼的地方增長這個synchronized這個關鍵字,而後這樣就能加快方法或者代碼的執行效率。而後可能還有一種狀況就 是,咱們有兩個變量,其中任何一個變量都是同時只能一個變量訪問,可是兩個變量能夠在同時被兩個變量訪問,這種 需求下咱們就得使用sychronized的帶參數的方法來...
2014-09-18 22:48 閱讀(1163)
在多線程開發中,總會遇到多個在不一樣線程中的方法操做同一個數據,這樣在不一樣線程中操做這個數據不一樣的順序 或者時機會致使各類不一樣的現象發生,以致於不能實現你預期的效果,不能實現一致性,這時候就可使用 synchronized關鍵字對一個方法來講,這個synchronized能保證全部調用這個方法的線程只有一個正在操做這個方法, 不會出現同時多個線程進入這個方法的狀況,下面咱們來一個例子說明這個...
工廠模式是最經常使用的模式之一,在建立線程的時候,咱們固然也能使用工廠模式來生產Thread,這樣就能替代默 認的new THread,並且在自定義工廠裏面,咱們能建立自定義化的Thread,而且計數,或則限制建立Thread的數量, 給每一個Thread設置對應的好聽的名字,或則其餘的不少不少事情,總之就是很爽,下面咱們來展現一個簡單的Thread 工廠模式來建立本身的Thread。 ...
2014-09-16 21:38 閱讀(1739)
當建立了好幾個線程的時候,不少線程的工做任務是相似或者一致的,這樣咱們就可使用ThreadGroup來管理他 們,ThreadGroup能夠隨時的獲取在他裏面的線程的運行狀態,信息,或者一條命令關閉掉這個group裏面的全部線 程,很是的簡單實用,下面咱們用一個例子來講明一下如何使用。 package com.bird.concursey; import java.util.Da...
在多線程開發中,常常會碰見在run方法裏面調用一個公共的屬性的事情,因爲每次start都會建立一個線程,所以全部的線程共享一個屬性,當其中任何一個線程更改了這個屬性的值,這個屬性在下面的使用過程當中都會被改變,這回致使不少不指望發生的事情發生,這就叫作線程不安全的。先來一個例子說明這個問題。 package com.bird.concursey; import java.util.Date;...
守護進程,顧名思義就是默默在後臺運行的進程,當JVM上沒有其餘進程運行時運行的進程,最典型的一個列子就是 JVM自帶的垃圾清理機,他就是在其餘程序不運行的時候佔用CPU來進行清理內存垃圾,所以他具備很強的不肯定性, 由於你不知道啥時候他就會運行,也不知道啥時候他不會運行,所以適合作一個不過重要的清理工做或者服務器上的監 聽工做。 下面咱們使用JVM的daemon來寫一個小例子,實現的效果如...
2014-09-15 23:38 閱讀(1647)
許久許久沒有寫過博客了,之前上班老是沒有時間,可是總感受寫博客仍是很好的一種記錄本身技術進程的一種方式 因而在辭職後來到北軟,又一次上學了,又一次有時間來寫博客了,因此再次開始寫博客了,呵呵,再次當學生的感受 真好!!!! 此次說的是Thread的join方法,之前老是使用他的run和sleep方法,哪兩個都是比較清楚的,對於這個join方法,他的 主要功能就是,當你在一個方...