1. 程式人生 > >併發注意事項(2)併發工具優先於wait和notify

併發注意事項(2)併發工具優先於wait和notify

自jdk1.5以後java提供了更為高階的併發工具,他們可以完成wait和notify所能完成的工作。

在java.util.conturrent包中更高階的併發工具分成三類:Executor Framework,併發集合(Concurrent Collection)以及同步器(Synchronizer).

Executor Framework是執行緒池的排程,即呼叫執行緒池的靜態方法:

ExecutorService executor = Executor.newSingleThreadExcecutor();

併發集合,既是在concurrent包中增加的一些併發的集合,例如:ConcurrentMap,其擴充套件了Map介面,並添加了一些方法。

ConcurrentMap除了提供了卓越的併發性外,速度也是非常快的,因此除非不得已,我們應當優先使用ConcurrentHashMap而不是Collections.synchronizedMap或者Hashtable.t

同步器是使一個執行緒能夠等待另一個執行緒的物件我們經常用的同步器有CountDownLatch,它可下面是一個示例:

下面還有一個示例,是用CountDownLatch代替wait,notify的:

上面的方法中用了三個CountDownLatch的物件,進行交替喚醒,先用ready執行了 System.nanoTime(),再用start執行了action.run(),再用done執行了

System.nonaTime()-startNanos.

簡而言之,我們應該,優先使用java.util.concurrent包中提供的更高階的語言來代替wait,notify.

相關推薦

併發注意事項2併發工具先於waitnotify

自jdk1.5以後java提供了更為高階的併發工具,他們可以完成wait和notify所能完成的工作。 在java.util.conturrent包中更高階的併發工具分成三類:Executor Framework,併發集合(Concurrent Collection)以及同

第六十九條 併發工具先於waitnotify

java中經常會用到子執行緒等,當各個執行緒作操作後,需要處理資料,我們需要自己重寫wait和notify方法,但1.5以後,java平臺對這些要求提高了,我們可以用高階的工具來代替。比如用執行緒池管理執行緒,或者java提供的併發集合類以及同步器(Synchronizer)。執行緒池上一條介紹過了

併發工具先於waitnotify

自從Java 1.5 發行版本開始,Java平臺就提供了更高階的併發工具,他們可以完成以前必須在wait和notify上手寫程式碼來完成的各項工作。既然正確的使用wait和notify比較困難,就應該用更高階的併發工具來代替。 java.util.concurrent中更高

專案經理注意事項2——敏捷開發中的頭兒

俗話說兵熊熊一個將熊熊一窩,跟對頭兒絕對是一件振奮人心的事兒。之前寫過一篇關於《專案經理注意事項》(千萬別要點)的部落格,當時所在團隊的開發模式是一般的瀑布模式開發,其實說白了就是類似於作坊式的開發,經理去和客戶談需求(我會告訴你主要是去談錢嗎?)然後拿回來一堆他(她)認為的需求就開始讓我們做了,很多時候無理

java 併發(五)---AbstractQueuedSynchronizer2

         文章部分程式碼和照片來自參考資料   ConditonObject          ConditionObje

傳遞外部資料進入netty併發送出去2

思路一相對來說有點複雜,而且總感覺不太安全。那麼也講一下思路二吧:client.java中有一個方法叫做channelFuture,利用它可以直接獲取到channel,而channel和ctx是一一對應的並且也能夠writeandFlush();那麼我們只要在client內部

Windows併發&非同步程式設計2原子操作Interlocked

閱讀過《作業系統》一書的人都知道“原子操作”這一概念。在計算機中,原子操作又稱為原語,作業系統保證:“原子操作是不可分割的,在執行完畢之前不會被任何其它任務或事件中斷。”。 原子操作可以是一個步驟,也可以是多個操作步驟,但是其執行期間不會有任何執行緒排程。

JQuery的一些註意事項2- AJAX 學習筆記

ear nbsp scroll local attr mat php文件 參數 傳遞參數 1. 動態加載外部文件: /*AJAX 動態加載外部文件*/ $(document).ready(function () { $(‘#btn1‘).c

【C++併發實戰】併發基本概念

  什麼是併發 併發,最簡單的理解就是,兩個或者以上的活動同時進行。舉個比較實際的例子,你可以手腳並用,兩隻手做不同的動作等等。 在計算機中的“併發”,是指一個系統可以同時執行多個獨立的活動。在以前大多數計算機都只有一個處理單元(或者核心),這種計算機在同一時刻只能執行一個任務,任務

小程式成長之路_給頁面新增tabBar 新增tabBar時的注意事項

上篇部落格我們已經成功建立頁面,並且顯示我們自己所建立頁面的內容,那麼我們都知道每個專案下面都會有tab bar,當然大部分都有,也不排除沒有的情況啊,那麼這篇我主要是來新增一個tabBar並且 總結一下寫的過程中一個小程式 小白開發者遇到讓人頭疼的問題,並講解解決方法,也許

Python注意事項

這篇是延續上次做的筆記寫的一點Py基礎學習,這幾天半打半就的學習有點拖時間。加油吧! 字元編碼 在python3版本中,字串是以Unicode編碼的,也就是說Python的字串是支援多語言的 >>> print('中文夾雜English_Strng也是可以的') 中文夾雜Engl

小程式 canvas注意事項1

在畫網路圖片時,需要先將圖片下載到本地,需要新增下載域名,在下載成功之後再進行畫圖操作,需要注意非同步下載問題,可以使用await async等框架,也可以使用callback,下面是個小例子: //

QGraphicsView的在過載重繪函式時,繪製控制元件的注意事項

在QGraphicsView中進行繪製的時候,注意座標對映,mapToScene,mapFromScene等可以實現scene和view的座標關係,但是在繪製控制元件的時候,不能涉及到w,h等長度概念,

使用Redis的五個注意事項命名

轉載:https://www.cnblogs.com/ajianbeyourself/p/4472788.html 閱讀目錄 1.使用key值字首來作名稱空間 2.建立一個類似 ”registry” 的key用於標記key使用情況 3.注意垃圾回收

ajax content-Type注意事項轉載

關於content-Type,我一般習慣將其設為application/json。最近遇到好幾個問題都是因此出現的,覺得有必要記一下。 content-Type定義的是傳送至伺服器的資料型別,data-Type定義的是伺服器返回的資料型別。 如果不指定 ContentType,預設為text

BigDecimal比較大小注意事項equals

在專案中使用BigDecimal的equals方法比較大小時,結果不為true,直接上示例 public static void main(String[] args) { BigDecimal a = new BigDecimal(0.00);

專案開發過程注意事項問題

一、資料流過程           在開發過程中一般採用資料請求服務的方式對資料進行接收。資料流程為:資料平臺(集體推送,採用非同步資料進行傳輸),接下來中間開發資料服務(中轉服務),最後推送至前端(app、web),最後在本地進行相應的資料計算

軟體漢化:OllyDBG 入門之五-- 破解注意事項

1.斷點: 所謂斷點就是程式被中斷的地方,中斷就是由於有特殊事件(中斷事件)發生,計算機暫停當前的任務(即程式),轉而去執行另外的任務(中斷服務程式),然後再返回原先的任務繼續執行。打個比方:你正在上班,突然有同學打電話告訴你他從外地坐火車過來,要你去火車站接他。然後你就向老

myBatis開發注意事項查詢某元素是否在集合中

一般的,如果1張表的ID是1個欄位,當我們要在b表中查詢a表ID的資料時,可以這樣寫:select * from TableA as a left TableB as b on a.id = b.id如果,d表中的ID有2個欄位組成,borrowApplyId和current

pandas DataFrame 賦值注意事項index

一 pandas DataFrame一列賦值問題說明,把b的列賦值給a情況1:a,b index設定相同如下程式碼import pandas as pd import numpy as np a = pd.DataFrame(np.arange(16).reshape(4,4