原创 創建線程安全對象的幾種方式

實例封閉 確保對象只能由單個線程訪問(線程封閉),或者通過一個鎖來保護對該對象的所有訪問,以確保對象是線程安全的。 實例代碼: @ThreadSafe public class PersonSet { @GuardedBy("t

原创 《覆盤》總結

什麼是覆盤? 在頭腦中對過去做過的事重新“過”一遍。 回顧、反思、探究、提升。   覆盤的由來 源自圍棋,下完一局圍棋後,回顧下,哪一步走的好,哪一步走的不好,還原下當時的邏輯和情緒,拓寬眼界和視野。 回顧、反思、探究、提升,一個都不能少

原创 併發程序的測試

概述 併發測試大致分爲兩類,即安全性測試與活躍性測試。安全性是“不發生任何錯誤的行爲”,活躍性是“某個良好的行爲終究會發生”。 吞吐量:指一組併發任務中已完成任務所佔的比例。 響應性:指請求從發出到完成之間的時間。 可伸縮性:指在增加更多

原创 性能和可伸縮性

對性能的思考 I.性能與可伸縮性 衡量程序的性能: “運行速度”-服務時間、等待時間 “處理能力”-生產量、吞吐量 可伸縮性指的是:當增加計算資源時(例如CPU、內存、存儲容量或I/O帶寬),程序的吞吐量或者處理能力能相應地增加。 當進行

原创 Java中的死鎖

死鎖 I.過度使用枷鎖可能導致順序性死鎖(Lock-Ordering Deadlock)。 如果所有線程以固定的順序來獲得鎖,那麼在程序中就不會出現順序死鎖的問題。 示例代碼: public class LeftRightDeadloc

原创 Java線程池的使用

設置線程池的大小 線程池的理想大小取決於被提交任務的類型以及所部署的系統。通常根據某種配置機制來提供。 對於計算密集型的任務,在擁有個處理器的系統上,當線程池的大小爲時,通常能實現最優的利用率。 對於包含I/O操作或者其他阻塞操作的任務,

原创 任務取消與關閉

任務取消 Java沒有提供任何機制來安全地終止線程。但它提供了中斷(Interruption),這是一種協作機制,能夠使一個線程終止另一個線程的當前工作。 設置“已請求取消(Cancellation Requested)”標誌。 示例代碼

原创 Executor框架與Java線程池

Executor框架 Executor基於生產者-消費者模式,提交任務的操作相當於生產者(生成待完成的工作單元),執行任務的線程則相當於消費者(執行完這些工作單元)。它提供了一種標準的方法將任務的提交和過程與執行過程解耦開來。 幾種線程池

原创 Java併發容器和同步工具類

同步容器類 早期的同步容器類Vector、Hashtable和Collections.synchronizedXXX創建的同步容器,封裝所有public方法,以保證線程安全。 問題:迭代操作期間可能拋ArrayIndexOutOfBoun

原创 Java線程安全和對象共享關鍵字

Synchronized關鍵字 靜態的synchronized方法以class對象作爲鎖,又稱Intrinsic Lock或Monitor鎖; Synchronized (lock) { //訪問或修改由鎖保護的共享狀態 } 同步代碼塊:

原创 我的ExtJS之旅---開端

作爲優秀的Web前端框架,ExtJS的發展已經歷經了2.x、3.x、4.x等版本更替,直到今天的4.2.1,期間的版本變革中,ExtJS發生了很多微妙的變化。如果再從2.x版本開始學起,將會是個痛苦的過程(至少我個人這樣認爲)。所以就從4