W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
同步:并發(fā)。多個(gè)線程同時(shí)訪問(wèn)同一份資源,確保資源安全,即線程安全。
鎖:每個(gè)對(duì)象都有且只有一把鎖。
一、同步塊:
synchronized (對(duì)象) {
}
注:
括號(hào)內(nèi)放的是對(duì)象,類.class也是對(duì)象。
二、同步方法
public synchronized void function1() {
//普通成員方法默認(rèn)獲得的是當(dāng)前對(duì)象的鎖。
}
public static synchronized void function1() {
//靜態(tài)方法默認(rèn)獲得的是當(dāng)前類的鎖,即類.class的鎖。
}
單例模式的應(yīng)用: 1.懶漢式
/**
* 懶漢式
* 1.構(gòu)造器私有化。
* 2.聲明私有的靜態(tài)屬性。
* 3.對(duì)外提供訪問(wèn)屬性的靜態(tài)方法,確保對(duì)象存在。
* */
class MyJvm{
private static MyJvm instance;
private MyJvm() {}
public static MyJvm getInstance() {
if(instance == null) {//提供效率
synchronized (MyJvm.class) {
if(instance == null) {//安全
instance = new MyJvm();
}
}
}
return instance;
}
}
2.餓漢式
/**
* 餓漢式
* 1.構(gòu)造器私有化。
* 2.聲明私有的靜態(tài)屬性,同時(shí)創(chuàng)建該對(duì)象。
* 3.對(duì)外提供訪問(wèn)屬性的靜態(tài)方法。
* 靜態(tài)成員會(huì)在加載類的時(shí)候就被初始化,因此可以直接獲取。但有時(shí)使用MyJvm的其他方法時(shí)但不想實(shí)例化是做不到的,可以使用第三種方法。
* 可參考static關(guān)鍵字知識(shí)點(diǎn)。
* */
class MyJvm{
private static MyJvm instance = new MyJvm();
private MyJvm() {}
public static MyJvm getInstance() {
return instance;
}
}
3.延遲加載
/**
* 延遲加載
* 當(dāng)使用JvmHolder類時(shí)才會(huì)初始化instance,延緩加載時(shí)間。
* 這樣在使用MyJvm的其他方法時(shí)就不會(huì)實(shí)例化instance。
* */
class MyJvm{
private static class JvmHolder{
private static MyJvm instance = new MyJvm();
}
private MyJvm() {}
public static MyJvm getInstance() {
return JvmHolder.instance;
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: