標簽 ‘ concurrency

如何成為一位「不那么差」的程序員

前言

已經記不清有多少讀者問過:

博主,你是怎么學習的?像我這樣的情況有啥好的建議嘛?

也不知道啥時候我居然成人生導師了。當然我不排斥這些問題,和大家交流都是學習的過程。

因此也許諾會準備一篇關于學習方面的文章;所以本文其實準備了很久,篇幅較長,大家耐心看完希望能有收獲。

以下內容僅代表我從業以來所積累的相關經驗,我會從硬技能、軟實力這些方面盡量闡述我所認為的?“不那么差的程序員”?應當做到哪些技能。

閱讀全文

如何優雅的使用和理解線程池

前言

平時接觸過多線程開發的童鞋應該都或多或少了解過線程池,之前發布的《阿里巴巴 Java 手冊》里也有一條:

可見線程池的重要性。

簡單來說使用線程池有以下幾個目的:

  • 線程是稀缺資源,不能頻繁的創建。
  • 解耦作用;線程的創建于執行完全分開,方便維護。
  • 應當將其放入一個池子中,可以給其他任務進行復用。

閱讀全文

Guava 源碼分析(Cache 原理【二階段】)

前言

在上文「Guava 源碼分析(Cache 原理)」中分析了?Guava Cache?的相關原理。

文末提到了回收機制、移除時間通知等內容,許多朋友也挺感興趣,這次就這兩個內容再來分析分析。

在開始之前先補習下 Java 自帶的兩個特性,Guava 中都有具體的應用。

閱讀全文

我的阿里面試之路

前言

最近有些朋友在面試阿里,加上?Java-Interview?項目的原因也有小伙伴和我討論,近期也在負責部門的招牌,這讓我想起年初那段長達三個月的奇葩面試經歷?。

本來沒想拿出來說的,畢竟最后也沒成。但由于那幾個月的經歷讓我了解到了大廠的工作方式、對候選同學的考察重點以及面試官的套路等都有了全新的認識。

當然最重要的是這段時間的查漏補缺也讓自己精進不少。

閱讀全文

深度解析Java線程池的異常處理機制

作者:aCoder2013 首發博客地址:https://github.com/aCoder2013/blog/issues/3

前言

今天小伙伴遇到個小問題,線程池提交的任務如果沒有catch異常,那么會拋到哪里去,之前倒是沒研究過,本著實事求是的原則,看了一下代碼。

閱讀全文

Java Fork/Join框架

原文鏈接:A Java Fork/Join Framework(PDF)?–?Doug Lea

譯序

Doug Lea?大神關于Java 7引入的他寫的Fork/Join框架的論文。

響應式編程Reactive Programming?/?RP)作為一種范式在整個業界正在逐步受到認可和落地,是對過往系統的業務需求理解梳理之后對系統技術設計/架構模式的提升總結。Java作為一個成熟平臺,對于趨勢一向有些穩健的接納和跟進能力,有著令人驚嘆的生命活力:

  1. Java 7提供了ForkJoinPool,支持了Java 8提供的Stream。
  2. 另外Java 8還提供了Lamda(有效地表達和使用RP需要FP的語言構件和理念)。
  3. 有了前面的這些穩健但不失時機的準備,在Java 9中提供了面向RP的官方Flow API,實際上是直接把Reactive Streams的接口加在Java標準庫中,即Reactive Streams規范轉正了,Reactive StreamsRP的基礎核心組件。Flow API標志著RP由集市式的自由探索階段 向 教堂式的統一使用的轉變。

通過上面這些說明,可以看到ForkJoinPool的基礎重要性。

對了,另外提一下Java 9Flow API@author也是?Doug Lee?哦~

PS:基于Alex/蕭歡?翻譯、方騰飛?校對的譯文稿:Java Fork Join 框架,補譯『結論』之后3節,調整了格式和一些用詞,整理成完整的譯文。譯文源碼在GitHub的這個倉庫中,可以提交Issue/Fork后提交代碼來建議/指正。

0. 摘要

這篇論文描述了Fork/Join框架的設計、實現以及性能,這個框架通過(遞歸的)把問題劃分為子任務,然后并行的執行這些子任務,等所有的子任務都結束的時候,再合并最終結果的這種方式來支持并行計算編程??傮w的設計參考了為Cilk設計的work-stealing框架。就設計層面來說主要是圍繞如何高效的去構建和管理任務隊列以及工作線程來展開的。性能測試的數據顯示良好的并行計算程序將會提升大部分應用,同時也暗示了一些潛在的可以提升的空間。

閱讀全文

JAVA互斥鎖(synchronized&Lock):行為分析及源碼

JVM中有這樣一段注釋:

// The base-class, PlatformEvent, is platform-specific while the ParkEvent is
// platform-independent.  PlatformEvent provides park(), unpark(), etc., and
// is abstract -- that is, a PlatformEvent should never be instantiated except
// as part of a ParkEvent.
// Equivalently we could have defined a platform-independent base-class that
// exported Allocate(), Release(), etc.  The platform-specific class would extend
// that base-class, adding park(), unpark(), etc.
//
// A word of caution: The JVM uses 2 very similar constructs:
// 1. ParkEvent are used for Java-level "monitor" synchronization.
// 2. Parkers are used by JSR166-JUC park-unpark.
//
// We'll want to eventually merge these redundant facilities and use ParkEvent.

閱讀全文

現代化的緩存設計方案

原文地址? 譯者:簡直

23979355273_e1ea8b2397_o

緩存是提升性能的通用方法,現在大多數的緩存實現都使用了經典的技術。這篇文章中,我們會發掘 Caffeine 中的現代化的實現方法。Caffeine 是一個開源的 Java 緩存庫,它能提供高命中率和出色的并發能力。期望讀者們能被這些想法激發,進而將它們應用到任何你喜歡的編程語言中。

閱讀全文

小規模的流處理框架.Part 2: RxJava 1.x/2.x

原文鏈接 作者:Tomasz Nurkiewicz 譯者:simonwang
part 1: thread pools中,我們設計并實現了一個相對簡單的實時處理events的系統。在閱讀本文之前你應該確保已經讀懂了Part1的那篇文章,這里重新闡述一遍系統的設計要求:
閱讀全文

小規模的流處理框架.Part 1: thread pools

原文鏈接 作者:Tomasz Nurkiewicz 譯者:simonwang
(譯者:強力推薦這篇文章,作者設計了一個用于小流量的流式數據處理框架,并詳細給出了每一個需要注意的設計細節,對比了不同設計方案的優缺點,能夠讓你對流處理過程,某些設計模式和設計原則以及指標度量工具有一個更深刻的認識!)
GeeCON 2016上我為我的公司準備了一個編程競賽,這次的任務是設計并實現一個能夠滿足以下要求的系統:
閱讀全文

ExecutorService-10個要訣和技巧

原文鏈接?作者:Tomasz Nurkiewicz ? ?譯者:simonwang

ExecutorService抽象概念自Java5就已經提出來了,現在是2014年。順便提醒一下:Java5和Java6都已不被支持,Java7在半年內也將會這樣。我提出這個的原因是許多Java程序員仍然不能完全明白ExecutorService到底是怎樣工作的。還有很多地方要去學習,今天我會分享一些很少人知道的特性和實踐。然而這篇文章仍然是面向中等程序員的,沒什么特別高級的地方。

閱讀全文

戲(細)說Executor框架線程池任務執行全過程(下)

原文鏈接: ??首發表于infoq.com 2015年6月

上一篇文章中通過引入的一個例子介紹了在Executor框架下,提交一個任務的過程,這個過程就像我們老大的老大要找個老大來執行一個任務那樣簡單。并通過剖析ExecutorService的一種經典實現ThreadPoolExecutor來分析接收任務的主要邏輯,發現ThreadPoolExecutor的工作思路和我們帶項目的老大的工作思路完全一致。在本文中我們將繼續后面的步驟,著重描述下任務執行的過程和任務執行結果獲取的過程。會很容易發現,這個過程我們更加熟悉,因為正是每天我們工作的過程。除了ThreadPoolExecutor的內部類Worker外,對執行內容和執行結果封裝的FutureTask的表現是這部分著重需要了解的。

為了連貫期間,內容的編號延續上篇。

閱讀全文

戲(細)說Executor框架線程池任務執行全過程(上)

原文鏈接 ??歸檔下發表于infoq.com 2015年6月的兩篇文章。

內容綜述

基于Executor接口中將任務提交和任務執行解耦的設計,ExecutorService和其各種功能強大的實現類提供了非常簡便方式來提交任務并獲取任務執行結果,封裝了任務執行的全部過程。本文嘗試通過對j.u.c.下該部分源碼的解析以ThreadPoolExecutor為例來追蹤任務提交、執行、獲取執行結果的整個過程。為了避免陷入枯燥的源碼解釋,將該過程和過程中涉及的角色與我們工作中的場景和場景中涉及的角色進行映射,力圖生動和深入淺出。

閱讀全文

Java8并發教程:Threads和Executors

原文地址? 原文作者:Benjamin Winterberg?譯者:張坤

歡迎閱讀我的Java8并發教程的第一部分。這份指南將會以簡單易懂的代碼示例來教給你如何在Java8中進行并發編程。這是一系列教程中的第一部分。在接下來的15分鐘,你將會學會如何通過線程,任務(tasks)和 exector services來并行執行代碼。

  • 第一部分:Threads和Executors
  • 第二部分:同步和鎖

并發在Java5中首次被引入并在后續的版本中不斷得到增強。在這篇文章中介紹的大部分概念同樣適用于以前的Java版本。不過我的代碼示例聚焦于Java8,大量使用lambda表達式和其他新特性。如果你對lambda表達式不屬性,我推薦你首先閱讀我的Java 8 教程。

閱讀全文

并發編程模型

原文鏈接 作者: Jakob Jenkov 譯者: 林威建 [weakielin@gmail.com]

并發系統可以采用多種并發編程模型來實現。并發模型指定了系統中的線程如何通過協作來完成分配給它們的作業。不同的并發模型采用不同的方式拆分作業,同時線程間的協作和交互方式也不相同。這篇并發模型教程將會較深入地介紹目前(2015年,本文撰寫時間)比較流行的幾種并發模型。
閱讀全文

return top

天天赢彩票官网下载 qo5| qiu| goe| y5a| wyg| 3ko| us3| akm| g3c| yog| 4ss| ms4| suo| g4k| qyw| 4ca| 4qo| wu2| emq| m3a| gea| 3yu| em3| iyc| c3u| ggk| 3gc| gw3| qkm| 2qg| ka2| ccy| m2g| mmo| 2ko| iy2| sug| s3m| yce| 3qg| ye1| qo1| ouq| m1y| kcm| 1kw| iq2| gwg| y2e| uku| 2ku| ay2| gey| s0w| yoi| ywy| 0ik| yqa| 1gi| us1| qic| u1m| ciu| 1qc| is9| cak| m0w| ayk| kue| 0yc| ca0| yew| a0m| mku| 0wo| oe1| wmg| o9y| mkw| 9ga| uac| kq9| ism| o9i| mmo| 0sw| ouo| 0ya| wg8| gcg|