原创 多線程之sleep和wait的區別

sleep: 使當前線程睡眠,但是並不釋放鎖 sleep是Thread類的方法 sleep可以用在任何地方 sleep必須捕獲異常 wait: 使當前進程等待,但是釋放鎖。 wait是Object類的方法 wait,包括notif

原创 多線程的鎖之ReentrantLock

ReentrantLock介紹: ReentrantLock是一個互斥鎖,可重入鎖。也被稱爲獨佔鎖,即ReentrantLock在同一時間只能被一個線程持有 實現了Lock接口的類,而且也是jdk中唯一實現了Lock接口的類,其中

原创 多線程之Semaphore信號量理解

Semaphore介紹: Semaphore是一個計數信號量,本質是一個共享鎖。線程可以通過acquire()來獲取信號量許可。舉個例子,假設初始化時給定一個信號量值,比如是5,線程調用acquire()方法時,判斷這個信號量是否

原创 多線程的鎖之悲觀鎖樂觀鎖的對比學習

悲觀鎖:讀取數據之前,假設會發生併發衝突,所以從一開始就爲了防止衝突,在獲取數據的時候進行加鎖,確保自己使用的過程中不會被修改,使用完成之後在進行鎖的釋放。典型的是Synchronized 樂觀鎖:假定不會發生數據衝突,所以獲取數

原创 多線程之Callable和Future

Callable 創建線程可以繼承Thread類,重寫run方法,也可以使用匿名內部類,也可實現Runnable接口,但是實現Runnable類,重寫run方法並沒有返回值。 從JDK1.5之後,java提供Callable接口,

原创 Spring框架初次學習之IOC

對spring的理解: spring就是一個容器,用來生成bean。spring的核心容器是benas。core。context(配置文件) ,expression。 IOC即:控制反轉, 在沒有IOC之前,直接new一個對象。會

原创 Volatile爲什麼能保證禁止重排序

上一篇提到了內存屏障,volatile通過插入讀屏障和寫屏障保證可見性,在volatile禁止重排序上,也是通過內存屏障實現的。 因爲內存屏障可以使一些指令按照特定順序執行。 volatile禁止指令重排序的規則:  1.當第二個

原创 代理模式

爲一個對象提供一個替身,以控制對這個對象的訪問,即通過代理對象訪問目標對象 優點:可以再目標對象實現的基礎上,增強額外的功能操作,即拓展目標對象的功能 被代理的對象:可以是遠程對象,創建開銷大的對象,或需要安全控制的對象 代理模式

原创 多線程的鎖之線程池核心參數

核心構造方法:ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlokingQueueworkQue

原创 Volatile如何保證可見性

volatile是java虛擬機提供的輕量級的同步機制,能夠保證內存共享變量的可見性。那麼volatile是如何保證可見性的呢? 首先要知道內存屏障是什麼, 內存屏障是一個CPU指令,內存屏障是這樣的指令 1,確保特定操作執行的順

原创 spring框架理解之DI

DI:即依賴注入。 依賴:一個對象需要調用另一個對象 注入:通過setter方法進行對另一個對象實例的設置 比如service層和dao層。爲了解耦吧dao設置給service層 傳統做法: 但是由spring設置service和

原创 多線程併發之CyclicBarrier

CyclicBarrier介紹: 位於java.util.concurrent併發包下,是一個工具類。CyclicBarrier是循環柵欄的意思,它能阻塞一組線程直到某個事件發生。等到釋放這些線程之後,CyclicBarrier還

原创 多線程併發之wait()和await()區別

wai()是Object類提供的,一般與synchronized聯合使用。調用wait之後會釋放鎖,導致線程等待。喚醒進程使用notify()或者notifyAll() await()Condition類是當中的,一般與Lock聯

原创 解決Unhandled Exception

當出現這個錯誤的時候說明調用的方法在方法聲明上已經聲明瞭會拋異常,那麼在調用時候就必須做處理 處理方式一:try -catch方式 處理方式二:向上一層拋出異常

原创 javaEE思維導圖