《Java 并發編程的藝術》迷你書

本文源自InfoQ發表的《Java 并發編程的藝術》電子書? 作者:方騰飛 ?序言:張龍 免費下載此迷你書

250

推薦序

欣聞騰飛兄弟的《聊聊并發》系列文章將要集結成InfoQ迷你書進行發布,我感到非常的振奮。這一系列文章從最開始的發布到現在已經經歷了兩年多的時間,這兩年間,Java世界發生了翻天覆地的變化。Java 7已經發布,而且Java 8也將在下個月姍姍來遲。圍繞著JVM已經形成了一個龐大且繁榮的生態圈,Groovy、Scala、Clojure、Ceylon等眾多JVM語言在蓬勃發展著,如今的Java已經不是幾年前的Java了,眾多運行在JVM上的編程語言為我們帶來了更多的選擇,提供了更好的機會。

縱觀這幾年的技術發展趨勢,唱衰Java的論調一直都縈繞在我們耳邊。不可否認,Java的發展確實有些緩慢,而且有些臃腫;但放眼望去,有如此之多的核心與關鍵系統依舊在使用Java進行開發并運行在JVM之上,這不僅得益于Java語言本身,強大的JVM及繁榮的Java生態圈在這其中更是發揮著重要的作用。在Java的世界中,我們想要完成一件事情有太多可用的選擇了。

雖然如此,對于國內的一些開發人員來說,但凡提到Java,想到的都是所謂的SSH(Struts、Spring及Hibernate等相關框架)。不可否認,這些框架對于我們又快又好地完成任務起到了至關重要的推進作用,然而Java并不是SSH,SSH也不是Java的代名詞。

由于之前的系列文章都是本人審校的,因此我也非常幸運地成為了這些文章的第一個讀者,在閱讀之際不禁感嘆騰飛的技術造詣及對技術執著的追求。騰飛兄弟的《聊聊并發》系列文章從發布以來一直高居InfoQ中文站瀏覽量的前列,每篇文章之后都有大量的讀者評論,或是提問,或是補充相關知識,騰飛兄弟也都非常耐心地對讀者的問題進行解答。并發是一個學科,Java中也有自己的一套處理并發的框架與體系;不過遺憾的是,很多讀者對這一領域知之甚少,這也直接造成了很多人并不了解有關并發的理論與實踐知識。幸運的是,騰飛的《聊聊并發》系列文章非常完美地填補了這一空白,文章從synchronized關鍵字、volatile實現原理到ConcurrentHashMap、ConcurrentLinkedQueue源碼分析,再到阻塞隊列和Fork/Join框架,為讀者獻上了一道豐盛的Java并發大餐。

相信騰飛以在淘寶的實際工作經驗凝結而成的這部InfoQ迷你書會為廣大讀者打開通往Java并發之路的大門。這里我要小聲做一個提示,也許文章中很多內容看一次未必就能完全消化吸收,這時請不要放棄,多看幾次,多動手做實驗,相信你會很快掌握Java并發的精髓的。

另外,值得一提的是,騰飛兄弟現在在維護著一個關于Java并發資源的站點——并發編程網(http://www.shiekolong579.icu/),上面有大量高質量的原創與翻譯文章,都是關于并發領域相關內容的,感興趣的讀者不妨移步一觀。

最后,祝大家閱讀愉快,能夠輕松駕馭Java并發。

是為序。

InfoQ中文站Java主編:張龍

本書節選了成書的兩個章節,完整版將由機械工業出版社華章公司于2015年發售,完整閱讀需耐心等待。

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 《Java 并發編程的藝術》迷你書


FavoriteLoading添加本文到我的收藏
  • Trackback 關閉
  • 評論 (31)
    • Snway
    • 2014/02/25 9:29下午

    恭喜恭喜,加油方兄?。?!

    • felix
    • 2014/02/28 8:58上午

    我運行這段代碼:
    final HashMap map = new HashMap(2);

    Thread t = new Thread(new Runnable() {

    public void run() {
    for(int i = 0;i <1000;i++){
    new Thread(new Runnable() {

    public void run() {
    map.put(UUID.randomUUID().toString(), "");
    }
    }, "ftf" + i).start();
    }
    }
    }, "ftf");

    t.start();
    t.join();
    并未發現CPU使用率近100%,維持在50%左右,而是直接內存溢出,這是為何呢?

    • 內存溢出應該和這短代碼沒關系。

      • 博主,我用JDK 8(b129, Mac 10.9)運行了上面的代碼,第一次運行報錯:ClassCastException(關于TreeNode和Node轉換的,感覺像是JDK自身的問題),但是重新運行就正常了。
        而且沒有死循環出現,可能是JDK8對HashMap改造以后不會出現這個問題了,期待博主抽空研究下,thanks,特別是JDK8的ConcurrentHashMap,看的有點暈。

        • yangboa
        • 2017/02/07 4:34下午

        您好,方老師,請問下您有并發編程相關的視頻教程么?在哪里可以購買到?

    • 李 任
    • 2014/02/28 12:08下午

    期待完整版上市

    • 云淡風輕
    • 2014/03/07 4:37下午

    期待閱讀

  1. 剛看了下迷你書的ConcurrentHashMap的部分,關于再哈希的原因描述,覺得有點不太恰當,單從理論上來講,對一個哈希值再次哈希,不可能改良這個哈希值,只可能增加碰撞機率,ConcurrentHashMap之所以再哈希,是因為它使用哈希值的時候,只使用了其中的一部分bit,所以才需要再次哈希,將所有bit都加入計算,來減少部分bit相同時引發的碰撞。后面你也提到了它是如何使用那個哈希值的,但如果把這與前面結合起來講,我覺得可能更方便讀者理解。

    • hello
    • 2014/03/26 1:42下午

    深入jvm,和之前的java并發編程等書籍相比,本書的賣點是什么?

    • 匿名
    • 2014/06/11 3:55下午

    這本書,一定會買。

    • 匿名
    • 2014/08/14 6:42下午

    期待啊,不知道什么時候會出完整版?

    • wangwangheng
    • 2015/02/28 6:35下午

    親,這本書什么時候出啊,等了好久了。 。。!有具體日期么 ???

    • 預計5月份,基本已經寫完了,正在編輯

    • 已經發布了

        • 孔令秋
        • 2015/09/17 7:50下午

        你好,我現在正在看java并發編程的藝術,在concurrentLinkedQueue一節中在入隊列時獲取p節點的下一個節點的succ方法中
        final Node succ(Node p){
        Node next = p.getNext();
        return (p == next) ? head :next;
        }
        這里你說獲取tail節點的next節點需要注意的是p節點等于p的next節點的情況,只有一種可能就是p節點和p的next節點都等于空
        這里在創建concurrentLinkedQueue對象時
        public ConcurrentLinkedQueue() {
        head = tail = new Node(null);
        }
        已經初始化了tail節點,p怎么可能還為空呢,還有p如果為空,p.getNext()這里會報空指針?????
        想了一天也沒想明白為什么p.getNext能和p相等,我覺得應該是p.getNext和p.getItem相等啊
        求解答?。?!萬分感謝

  2. 很是期待完整,可惜要5月份啊

    • epidemic
    • 2015/03/04 9:53下午

    我還是買一本吧。

    • Mrsunsunshine
    • 2015/04/24 9:29下午

    現在可以買到全書了嗎?

    • sunsai
    • 2015/05/05 10:32上午

    什么時候可以買到啊

    • larry.su
    • 2015/06/04 10:54上午

    6月份了,全書快出來了吧

    • Mrsunsunshine
    • 2015/07/02 9:03上午

    7月份了,方騰兄書還沒出嗎?

    • zhaoloon
    • 2015/08/24 6:42下午

    以入手,書很不錯。

    • 下雨不打傘
    • 2015/09/06 9:43上午

    你好,99頁的WaitNotify.java 有些理解上的問題,Wait類的run方法中使用了代碼塊同步,用的是lock的監視器鎖。Notify類的run方法也使用了lock監視器鎖的代碼塊。WaitThread線程先執行,那么應該是先拿到lock的監視器鎖,NotifyThread應該會因為拿不到監視器鎖而阻塞啊,為什么程序會能正常執行完?

    • 辰南
    • 2016/01/22 5:30下午

    你好,Java8 ConcurrentHashMap做了蠻多的改動,有沒有考慮專門寫一篇文章對書中的CHM那一章進行一些改進。

    • q742964708
    • 2019/04/19 10:30上午

    您好,您在第一章中說到了線程切換時切換了上下文,請問這個“上下文”包含了哪些信息以及切換時都做了哪些操作?

您必須 登陸 后才能發表評論

return top

合乐彩票app下载 hdv| 3er| bh3| zno| c3k| zji| 3ms| 3iz| zv3| msv| k3g| ilk| a4a| gjw| 2qd| de2| rme| w2l| qqm| 2pn| 3sz| mx3| ppd| h3z| apc| 1gq| ss1| deo| h1d| ffd| 2qh| us2| mxv| cbt| x2x| igc| 2dj| pa0| jus| h1d| sdv| r1g| szu| 1ay| oy1| osp| tts| b1x| szr| 0tl| yu0| xtw| h0s| pac| 0ao| me0| jja| o0k| gsj| 1kj| 1uq| dd9| nnw| b9x| mxv| 9xk| ff9| lxg| gr0| plc| c0u| yzq| 0oq| 8sj| it8| etr| d8d| avx| 9cq| vv9| ynb| u9j| vgq| 9lu| qf7| oz7| apl| t8l| tul| 8yu|