国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

探秘高并發之java.util.concurrent(一)

includecmath / 929人閱讀

摘要:針對高質量多線程并發程序設計時為防死崩等現象的出現,比如使用之前的和等,每每需要考慮性能死鎖公平性資源管理以及如何避免線程安全性方面帶來的危害等諸多因素,往往會采用一些較為復雜的安全策略,加重了程序員的開發負擔。

大家好,最近由于公司的事情不是很多,準備開篇寫一寫concurrent這一塊,因為最近好多面試者對這個都不是很了解,有的是知其然不知其所以然,我寫這篇(系列)文章的初衷是為了總結和歸納這一塊,如果本文能夠對大家帶來一定的幫助,那么一定是我莫大的榮耀,好了,話不多說我們開始探秘concurrent吧。

首先從字面意思我們能理解到concurrent是“同時發生的”,在java中自然是用來做并發使用的,這個concurrent 包是java5才提出的,然而經過幾個版本的更迭,目前已經是大家都會深入用到,或者是多少會接觸到的,其實在java中已經有ThreadRunnable等多線程的實現;我們為什么要用到concurrent包來做呢?下面我將帶大家一步一步的了解。

針對高質量Java多線程并發程序設計時,為防死崩等現象的出現,比如使用java之前的wait()notify()和synchronized等,每每需要考慮性能、死鎖、公平性、資源管理以及如何避免線程安全性方面帶來的危害等諸多因素,往往會采用一些較為復雜的安全策略,加重了程序員的開發負擔。為了減少甚至是去除咱們這種后顧之憂, Doug Lea為大家推出了這個解決方案,讓眾多java開發者如沐春風。

在java8中concurrent一共有21個接口、38個類其中包括抽象類和內部類、1個枚舉類、6種異常方式,當然這個數字都不重要,大家在看api的時候只會找自己關注的部分。

1. BlockingDeque

BlockingDeque繼承自BlockingQueue和 Deque ;BlockingQueue也是java.util.concurrent包下面的一個接口,而Deque則屬于java.util

來自官方的一段說明是,該接口定義了在deque兩端訪問元素的方法。提供了插入、刪除和檢查元素的方法。這些方法中的每個存在兩種形式:一個拋出一個異常,如果操作失敗,另一個返回一個特殊的值(無論是null或false,取決于操作)。插入操作的后一種形式是專為使用有容量限制deque實現;在大多數實現中,插入操作不會失敗。

這個隊列的特性其實是保證了先進先出的原則,與列表接口不同,此接口不提供對元素索引訪問的支持。在實現中Deque不強制禁止空值,但是不推薦這樣去做。

2. BlockingQueue

這個接口和上面一個長得有點像,但不要混淆了,干妹妹和干妹妹還不是一個意思呢(好污...)。BlockingQueue是用來對不同操作進行不同處理的(你這不是廢話么...)BlockingQueue一共有四種處理形式,分別為 Throws exception、 Special value、 Blocks(不是打籃球的蓋帽)、 Times out;其實核心意思就是不滿足的就拋出異常、根據操作返回一個特定值true或false、讓當前線程執行到成功為止,最后就是設定一個超時時間,以免第三步一直不成功。

下面是官方給出的一個例子,大家可以感受下:

class Producer implements Runnable {
   private final BlockingQueue queue;
   Producer(BlockingQueue q) { queue = q; }
   public void run() {
     try {
       while (true) { queue.put(produce()); }
     } catch (InterruptedException ex) { ... handle ...}
   }
   Object produce() { ... }
 }

 class Consumer implements Runnable {
   private final BlockingQueue queue;
   Consumer(BlockingQueue q) { queue = q; }
   public void run() {
     try {
       while (true) { consume(queue.take()); }
     } catch (InterruptedException ex) { ... handle ...}
   }
   void consume(Object x) { ... }
 }

 class Setup {
   void main() {
     BlockingQueue q = new SomeQueueImplementation();
     Producer p = new Producer(q);
     Consumer c1 = new Consumer(q);
     Consumer c2 = new Consumer(q);
     new Thread(p).start();
     new Thread(c1).start();
     new Thread(c2).start();
   }
 }

好啦,本篇文章就先到這里了,我們后面會繼續講這個神奇的concurrent包,大家有興趣的話可以關注一下本文。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65029.html

相關文章

  • 探秘并發java.util.concurrent (二)

    摘要:通過方法提交一個任務,并且通過對象來獲得結果。對象可以取消運行任務,設置等待時間,獲取任務狀態,最終獲得任務結果。類似于,但是并不會有返回結果和異常信息。由兩個階段所觸發的,沒有保證的結果用于依賴階段的計算。 本系列關于concurrent的代碼示例,是被我分割成了小部分,在系列文章結束以后,我會將較為完整的代碼上傳,在寫的過程中我會參考官方API以及其他牛人的見解,大家有不同的看法可...

    Tamic 評論0 收藏0
  • java并發系列 - 第1天:必須知道的幾個概念

    摘要:并發和并行并發和并行是兩個非常容易被混淆的概念。并發說的是在一個時間段內,多件事情在這個時間段內交替執行。并行說的是多件事情在同一個時刻同事發生。由于線程池是一個線程,得不到執行,而被餓死,最終導致了程序死鎖的現象。 同步(Synchronous)和異步(Asynchronous) 同步和異步通常來形容一次方法調用,同步方法調用一旦開始,調用者必須等到方法調用返回后,才能繼續后續的行為...

    zhoutk 評論0 收藏0
  • 長文慎入-探索Java并發編程與并發解決方案

    摘要:所有示例代碼請見下載于基本概念并發同時擁有兩個或者多個線程,如果程序在單核處理器上運行多個線程將交替地換入或者換出內存這些線程是同時存在的,每個線程都處于執行過程中的某個狀態,如果運行在多核處理器上此時,程序中的每個線程都 所有示例代碼,請見/下載于 https://github.com/Wasabi1234... showImg(https://upload-images.jians...

    SimpleTriangle 評論0 收藏0
  • java并發系列 - 第19天:JUC中的Executor框架詳解1,全面掌握java并發相關技術

    摘要:有三種狀態運行關閉終止。類類,提供了一系列工廠方法用于創建線程池,返回的線程池都實現了接口。線程池的大小一旦達到最大值就會保持不變,在提交新任務,任務將會進入等待隊列中等待。此線程池支持定時以及周期性執行任務的需求。 這是java高并發系列第19篇文章。 本文主要內容 介紹Executor框架相關內容 介紹Executor 介紹ExecutorService 介紹線程池ThreadP...

    icattlecoder 評論0 收藏0
  • java并發系列 - 第21天:java中的CAS操作,java并發的基石

    摘要:方法由兩個參數,表示期望的值,表示要給設置的新值。操作包含三個操作數內存位置預期原值和新值。如果處的值尚未同時更改,則操作成功。中就使用了這樣的操作。上面操作還有一點是將事務范圍縮小了,也提升了系統并發處理的性能。 這是java高并發系列第21篇文章。 本文主要內容 從網站計數器實現中一步步引出CAS操作 介紹java中的CAS及CAS可能存在的問題 悲觀鎖和樂觀鎖的一些介紹及數據庫...

    zorro 評論0 收藏0

發表評論

0條評論

includecmath

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<