java線程系列

 

java線程系列---同步器之Exchanger

Exchanger允許兩個線程在集合點交換對象,它在多流水線設計中是有用的 例子:線程間的數據交換,比如:兩個人約定在某個地點交易,一手交錢,一手交貨,當一個人先到指定地點,則這個人在此處等着,直到另一人到達此處才完成交易 public class ExchangerTest { public static void main(String[] args) { ExecutorServic...
 閱讀(292) 評論(0)
 

java線程系列---隊列ArrayBlockingQueue

該接口定義了 put 和 take 的阻塞版本,這些不同的類覆蓋了生產者-使用者、消息傳遞、並行任務執行和相關併發設計的大多數常見使用的上下文。 例子:利用隊列來實現主線程先執行10次,然後子線程執行50次,依次循環下去 public class BlockingQueueCommunication { public static void main(String[] args) {...
 閱讀(337) 評論(0)
 

java線程系列---同步器之CountDownLatch

CountDownLatch 是一個極其簡單但又極其常用的實用工具,用於在保持給定數目的信號、事件或條件前阻塞執行,通過調用await(),countDown()方法,實現同步功能。 例子:有三個線程,等待主線程下發命令,當主線程下發命令時,三個線程會接收命令,並執行,主線程接收執行完的結果 public class CountdownLatchTest { public stati...
 閱讀(412) 評論(0)
 

java線程系列---BlockingQueue隊列的用法

在一隊列中,通過存放數據,然後取數據,無數據時,等待取數據,隊列數據滿了時,等待放數據 public class BlockingQueueTest { public static void main(String[] args) { final BlockingQueue queue = new ArrayBlockingQueue(3); for(int i=0;i new Thre...
 閱讀(860) 評論(0)
 

java線程系列---Semaphore信號燈

例如:共有三張椅子,現在有十人人等着去坐,一張椅子只能坐一人,坐上椅子後離開給等待的人坐,例子如下: public class SemaphoreTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final  Semaphore...
 閱讀(583) 評論(0)
 

java線程系列---java5的互斥鎖Lock

public class LockTest { //lock示例,線程間的互斥鎖,在java5中使用,通過lock和unlock方法實現,與synchronized作用一樣 public static void main(String[] args) { new LockTest().init(); } private void init(){ final Outputer o...
 閱讀(430) 評論(0)
 

java線程系列---condition例子

例如:有三個線程 ,當1執行完後,指定2執行,2執行完後指定3執行,3執行完後指定1執行 public class ThreeConditionCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread( new Runn...
 閱讀(960) 評論(2)
 

java線程系列---condition的講解

Condition 將 Object 監視器方法(wait、notify 和notifyAll)分解成截然不同的對象,以便通過將這些對象與任意Lock 實現組合使用,爲每個對象提供多個等待 set (wait-set)。其中,Lock 替代了synchronized 方法和語句的使用,Condition 替代了 Object 監視器方法的使用。         條件(也稱爲條件隊列 或條...
 閱讀(520) 評論(1)
 

java線程系列---讀寫鎖ReentrantReadWriteLock

獲取順序 此類不會將讀取者優先或寫入者優先強加給鎖定訪問的排序。但是,它確實支持可選的公平 策略。當公平地構造線程時,線程利用一個近似到達順序的策略來爭奪進入。當釋放寫入鎖定後,將寫入鎖定分配給等待時間最長的單個寫入者,如果有一個等待時間比所有寫入者更長的讀取者,則將讀取鎖定分配給讀取者 set。當非公平地構造線程時,則不需要按照到達順序進入鎖定。不管是哪一種情況,如果讀取者處於活動狀態,而某個...
 閱讀(1120) 評論(1)
 

java線程系列---線程範圍內共享變量(二)

通過調用ThreadLocal來實現線程範圍內共享變量 源代碼如下: public class ThreadLocalTest { private static ThreadLocal map = new ThreadLocal(); public static void main(String[] args) { for(int i=0;i new Thread(new Runn...
 閱讀(633) 評論(1)
 

java線程系列---線程範圍內共享變量(一)

在java開發中,有時會遇到這種情況,有一變量,其中有三個模塊去訪問,在多個線程中,確保,在同一線程內,其訪問的是同一變量,這時就要實現線程範圍內共享變量 源代碼如下: public class ThreadSharaDate { private static Map map = new HashMap(); public static void main(String[] args) {...
 閱讀(1869) 評論(1)
 

java線程系列---java5中的線程池

public class ThreadPoolsTest { public static void main(String[] args) { //ExecutorService threadpools = Executors.newFixedThreadPool(3);//固定線程池 //ExecutorService threadpools = Executors.newCach...
 閱讀(566) 評論(1)
 

java線程系列---關於線程同步與互斥問題

例如:子線程運行10次,然後主線程運行100次,按照這樣循環50次,如何設計 public class ThreadCommunication { public static void main(String[] args) { final Output output = new Output(); //子線程 new Thread( new Runnable(){ publ...
 閱讀(548) 評論(0)
 

java線程系列---synchronized詳解

記下來,很重要。 Java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多隻有一個線程執行該段代碼。      一、當兩個併發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以後才能執行該代碼塊。      二、然而,當一個線程訪問object的...
 閱讀(469) 評論(1)
 

java線程系列---類中的定時器Timer

常用的定時用法爲:new Timer().schedule(new MyTimerTask(), 2000); 表示爲:2秒之後執行MyTimerTask裏的方法 new Timer().schedule(new MyTimerTask(), 2000,1000); 表示爲:2秒之後執行MyTimerTask裏的方法並每隔1秒執行一次 具體示例如下: private static...
 閱讀(473) 評論(0)
 

java線程系列---Runnable和Thread的區別

在java中可有兩種方式實現多線程,一種是繼承Thread類,一種是實現Runnable接口;Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多線程操作了,但是一個類只能繼承一個父類,這是此方法的侷限,   下面看例子:   package org.thread.demo;   class MyThread extend...

發佈了114 篇原創文章 · 獲贊 15 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章