原创 Spring2.3——抽象Bean和子Bean

將多個Bean所包含的通用信息提取出來,配置成一個Bean模板——但不希望Spring去創建該bean, 於是需要指定【abstractr="true"】——這就是抽象Bean。 抽象Bean並不是抽象類,只是配置信息的模板。 1、be

原创 Spring2.1——自動裝配、簡化配置、嵌套bean、集合

1、自動裝配 可通過<beans.../>元素的default-autowire屬性指定,也可通過<bean.../>元素的autowire屬性指定。 自動裝配可以減少配置文件的工作量,但降低了依賴關係的透明性和清晰性。儘量少用!  au

原创 Spring2.2——實例化Bean的3種方式

 1、調用該Bean的實現類的構造器。 <bean id="dog" class="cony.domain.Dog"/> 2、調用工廠類的靜態工廠方法。         factory-method:指定工廠方法的名字         c

原创 Spring2.4——FactoryBean、獲取Bean的id

1、FactoryBean——Spring提供的一個特殊接口      FactoryBean接口是工廠Bean的標準接口,實現該接口的Bean通常作爲工廠Bean使用,      當我們把工廠Bean部署在容器中、並通過getBean(

原创 CAS以及其ABA問題及解決方法

1、簡述 常見的Java併發手段是加鎖,但加鎖、解鎖操作是消耗性能的。相比起來,CAS無鎖方案則沒有加鎖、解鎖的性能消耗,還保證了互斥性,但同時也存在ABA的問題 2、CAS CAS的語義是:將內存位置的值與預期原值比較,如果相匹配,那麼

原创 ThreadLocal

1、簡介 ThreadLocal提供了一種訪問某個變量的特殊方式:訪問到的變量屬於當前線程,即保證每個線程的變量不一樣,而同一個線程在任何地方拿到的變量都是一致的,這就是所謂的線程隔離 ThreadLocalMap並不是爲了解決線程安全問

原创 《Java併發編程實戰》筆記6——notify、notifyAll

    只有同時滿足以下兩個條件時,才能用單一的notify而不是notifyAll: a.所有等待線程的類型都相同,只有一個條件謂詞與條件隊列相關,並且每個線程在從wait返回後將執行相同的操作。 b.單進單出。在條件變量上的每次通知,

原创 ReentrantLock、ReentrantReadWriteLock

一、ReentrantLock ReentrantLock是可重入鎖,已經獲得鎖的線程可以再次獲得鎖,如果一個線程獲取了n個鎖,那麼釋放的時候同樣要釋放n個鎖。 同步組件主要是通過重寫AQS的幾個protected方法來表達自己的同步語義

原创 Lock、AbstractQueuedSynchronizer

一、Lock簡介 Lock是併發訪問共享資源的另一種方式,當需要使用chain lock這種時會很靈活,jdk文檔中舉了一個例子:(For example, some algorithms for traversing concurren

原创 《Java併發編程實戰》筆記4——避免活躍性危險

1、死鎖 (1)鎖順序死鎖 例子: public class LeftRightDeadlock { private final Object left = new Object(); private final Obj

原创 《Java併發編程實戰》筆記5——性能與測試

性能與可伸縮性 1、小工具 (1)perfar:測試CPU忙碌程度信息 (2)iostat、perfmon:判斷是否是I/O密集 2、單個任務的處理時間不僅包括執行任務Runnable的時間,也包括從共享隊列中取出任務的時間。如果通過加鎖

原创 《Java併發編程實戰》筆記3——線程池的使用

1、線程飢餓死鎖 在線程池中,如果任務依賴於其他任務,那麼可能發生死鎖。在單線程的Executor中,如果一個任務將另一個任務提交到同一個Executor,並且等待這個被提交任務的結果,那麼通常會引發死鎖。 如下面代碼所示: publi

原创 《Java併發編程實戰》筆記2——取消與關閉

1、取消 (1)生產者消費者問題中,如果採用BlockingQueue阻塞隊列。假如生產者生產的速度超過了消費者的處理速度,隊列將被填滿,put操作也會被阻塞。當生產者在put方法中阻塞時,如果消費者希望取消生產者任務,它可以通過調用ca

原创 《Java併發編程實戰》筆記1——Java線程安全基礎

1、什麼是線程安全? 多個線程訪問某個類時,不管運行時環境採用何種調用方式或者這些線程將如何交替執行,並且在主調代碼中不需要任何的額外的同步或協同,這個類都能表現出正確的行爲,那麼就稱這個類是線程安全的。(摘自Java併發編程實戰) 2、

原创 Iterator源碼解析及和for-each循環

在使用foreach循環遍歷集合的過程中,如果集合被修改了,會拋出ConcurrentModificationException異常。 以這段代碼爲例子: public class SynProblem { List<Widget>