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