原创 Java併發編程實戰 - 第2章 線程安全性

進程與線程 操作系統可以使計算機同時能運行多個程序,每個不同的程序在單獨的進程中運行。 同一個進程可以有多個線程的程序控制流。線程可以共享進程範圍內的資源,但每個線程有各自的計數器,棧和局部變量。 多線程可以提升資源的利用率及

原创 設計模式 - Null Object 模式

代碼中到處都是處理null字段或變量的重複邏輯。 將null邏輯替換爲一個Null Object, 提供一個正確的null行爲對象。 示例: public interface ICustomer { public bool

原创 設計模式 - 訪問者模式(Visitor)

Visitor模式表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 類圖: • 一個對象結構包含很多類對象,它們有不同的接口,而你想對這些對象實施一些依賴於其具體類的操作

原创 Java併發編程實戰 - 第8章 線程池的使用

如何配置和調優線程池? Executor 將任務的提交與任務的執行策略解耦開來。 不同的任務有不同的執行策略,以此考慮線程池的大小或配置限制: 獨立的任務 依賴性的任務 在線程池中,如果一個任務等待其他任務的結果,可能出現線

原创 Java 8 - Lambda表達式

本篇來自於 State of Lambda by Brian Goetz Java 8 包括的首要的語言新特性有: Lambda 表達式 (非正式式的稱爲”閉包”或”匿名方法”) 方法和構造器引用 擴展的目標類型和類型推導

原创 Java語言 - 嵌套類(nested class)

嵌套類(nested class)指被定義在一個類的內部的類。 嵌套類有四種: 靜態成員類 非靜態成員類 局部類 匿名類 除了靜態成員類外的三種又被稱爲內部類。 嵌套類存在的目的是爲外圍類(enclosing cla

原创 Java併發編程實戰 - 第12章 併發程序的測試

正確性測試 基本單元測試 對阻塞操作的測試 安全性測試 資源管理的測試 使用回調 產生更多的交談操作 性能測試 增加計時功能 多種算法比較 響應性衡量 避免性能測試的陷阱 其他測試方法

原创 Java併發編程實戰 - 第6章 任務執行

Executor框架提供一種標準的方法將任務的提交過程和任務的執行過程解耦。 Executor基於生成者和消費者模式,提交任務相當於生產者,執行任務相當於消費者。 Executor - 執行Runnable任務 Executo

原创 Java併發編程實戰 - 第4章 對象的組合

如何通過線程安全的組件組合設計線程安全的類? 首先要封裝所有狀態,封裝簡化了安全類的實現過程。 設計線程安全的類,需考慮三個基本要素 找出構成對象狀態的所有變量 找出約束狀態變量的約束條件–>不變性條件和後驗條件 建立對象狀

原创 Java併發編程實戰 - 第14章 自定義同步工具

如何創建線程安全的狀態依賴的類? 狀態依賴操作如一直阻塞直到某個條件爲真。 四種實現方法: 方法一:在類庫中現有狀態依賴類的基礎上進行構造 如利用BlockingQueue, FutureTask, CountdownLat

原创 Java併發編程實戰 - 第13章 顯式鎖

synchronized和ReentrantLock Java的內置鎖synchronized和ReentrantLock有相同的內存語義。但內置鎖在功能上有不足,如不能中斷一個正在等待獲得鎖的線程,或者無法請求獲得一個鎖時無限

原创 Java併發編程實戰 - 第11章 性能與可伸縮性

線程最主要的目的是提高程序的運行性能。但線程也會引入額外的開銷,如線程之間的協調,上下文切換,線程的創建和銷燬,線程的調度。 性能有很多指標,如運行速度,吞吐量,可伸縮性等。 可伸縮性指增加計算資源時(如CPU,內存,I/O帶寬

原创 Java併發編程實戰 - 第7章 取消與關閉

Java沒有提供某種搶佔式的機制來取消操作或結束線程。 可以通過協作式的中斷機制來實現取消操作。 可以使用FutureTask和Executor框架,構建可以取消的任務和服務。 取消任務的原因有: 用戶請求取消 有時間限制

原创 Java併發編程實戰 - 第5章 基礎構建模塊

Java類庫提供了豐富的併發基礎構建模塊 同步容器類 併發容器 阻塞隊列 同步器 同步容器類 Vector, Hashtable, Collections.synchronizedXxx 1. 客戶端複合操作需要加鎖 2

原创 Java 8 - Lambda表達式: 類庫Streams & Collections

Java 8 利用新語言特性, 首要的如 lambda 表達式和缺省方法, 改進了Collections類庫,和新增加了Streams類庫,以及Function類庫。