Java多線程下的單例模式參考
單例有多種的寫法,本例是懶漢式單例的一種寫法。在高并發(fā)環(huán)境下需要注意的是:
1.單例在并發(fā)訪問并調(diào)用其相應(yīng)的getInstance方法的時(shí)候也會(huì)造成創(chuàng)建多個(gè)實(shí)例對(duì)象,加鎖是必要的。
2.使用synchronized是比較好的解決方案,優(yōu)點(diǎn)是代碼簡潔,缺點(diǎn)是在拋出異常的時(shí)候不能處理維護(hù)使系統(tǒng)處于良好狀態(tài)。
3.顯示的lock設(shè)定是良好的解決方案。
使用lock的代碼如下:
package demo;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 參考使用
* @author Watson_Xu
* @date 2012-1-8 下午04:31:09
*/
public final class SingletonContext {
private static SingletonContext sc = null;
private SingletonContext() {
}
private static Lock lock = new ReentrantLock();
public static SingletonContext getInstance() {
if(sc == null) {
lock.lock();
if(sc == null) {
try{
sc = new SingletonContext();
} finally {
lock.unlock();
}
}
}
return sc;
}
}
使用synchronized的時(shí)候代碼如下:
package demo;
/**
* 參考使用
*
* @author Watson_Xu
* @date 2012-1-8 下午04:31:09
*/
public final class SingletonContext {
private static SingletonContext sc = null;
private SingletonContext() {
}
public static synchronized SingletonContext getInstance() {
if(null == sc) {
sc = new SingletonContext();
}
return new SingletonContext();
}
}
查看更多Java的語法,大家可以關(guān)注:《Thinking in Java 中文手冊(cè)》、《JDK 1.7 參考手冊(cè)官方英文版》、《JDK 1.6 API java 中文參考手冊(cè)》、《JDK 1.5 API java 中文參考手冊(cè)》,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中使用Feign整合nacos,gateway進(jìn)行微服務(wù)之間的調(diào)用方法
這篇文章主要介紹了springboot中使用Feign整合nacos,gateway進(jìn)行微服務(wù)之間的調(diào)用方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
SpringBoot使用AOP,內(nèi)部方法失效的解決方案
這篇文章主要介紹了SpringBoot使用AOP,內(nèi)部方法失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
關(guān)于Mybatis的@param注解及多個(gè)傳參
這篇文章主要介紹了關(guān)于Mybatis的@param注解及多個(gè)傳參,@Param的作用就是給參數(shù)命名,比如在mapper里面某方法A(int id),當(dāng)添加注解后A(@Param(“userId”) int id),也就是說外部想要取出傳入的id值,只需要取它的參數(shù)名userId就可以了,需要的朋友可以參考下2023-05-05
Spring?MVC各種參數(shù)進(jìn)行封裝的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Spring?MVC各種參數(shù)進(jìn)行封裝的相關(guān)資料,SpringMVC內(nèi)置多種數(shù)據(jù)類型轉(zhuǎn)換器,可以根據(jù)請(qǐng)求中的參數(shù)與后端控制器方法的參數(shù)的關(guān)系為我們實(shí)現(xiàn)簡單的數(shù)據(jù)封裝,需要的朋友可以參考下2023-06-06
Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例
本篇文章主要介紹了Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08

