## 單例模式
單例模式是為了確保系統中某個類只存在一個實例。
在多種寫法中,推薦使用靜態內部類方式,利用類加載一次特性確保只有一個實例(線程安全),
同時具備無鎖和懶創建優點。
示例:
~~~
public class StaticInnerClassSingleton {
// 私有化構造方法
private StaticInnerClassSingleton(){}
// 內部類
static class Holder{
static StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();
}
// 獲取實例對象
public static StaticInnerClassSingleton getInstance(){
return Holder.INSTANCE;
}
public static void main(String[] args) {
for(int i=0;i<10;i++){
new Thread(()->{
System.out.println(StaticInnerClassSingleton.getInstance());
}).start();
}
}
}
~~~
## 不變模式
在并發場景中,不變對象是不需要同步操作的。(因為對象不會改變,所以多個線程訪問不會出現不一致問題)
特征:
1. class被修飾為final
2. 屬性是私有且被final修飾的
JDK中所有的元數據類、包裝類都是使用不變模式實現的。
```
java.lang.String
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
```
例子:
~~~
public final class FinalCat {// final 確保無子類
private final String name;// final 確保屬性
private final Integer age;
public FinalCat(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "FinalCat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
FinalCat cat = new FinalCat("皮侃子", 4);
System.out.println(cat);
}
}
~~~
## 參考資料
* 書籍 葛一鳴 * 《Java高并發程序設計》
- 面試突擊
- Java虛擬機
- 認識字節碼
- 000Java發展歷史
- 000Macos10.15.7上編譯OpenJDK8u
- 001熟悉Java內存區域
- 002熟悉HotSpot中的對象
- 003Java如何計算對象大小
- 004垃圾判定算法與4大引用
- 005回收堆和方法區中對象
- 006垃圾收集算法
- 007HotSpot虛擬機垃圾算法實現篇1
- 007HotSpot虛擬機垃圾算法實現篇2
- 007HotSpot虛擬機垃圾算法實現篇3
- 008垃圾收集器
- 009內存分配與回收策略
- 010Java虛擬機相關工具
- 011調優案例分析
- 012一次IDEA的啟動速度調優
- 013類文件Class的結構
- 014熟悉字節碼指令
- 015類加載機制(過程)
- 016類加載器
- IDEA的JVM參數
- Java基礎
- Java自動裝箱與拆箱
- Java基礎數據類型
- Java方法的參數傳遞
- Java并發
- 001走入并行的世界
- 002并行程序基礎
- 003熟悉Java內存模型JMM
- 004Java并發之volatile關鍵字
- 005線程池入門到精通
- 006Java多線程間的同步控制方法
- 007Java維基準測試框架JMH
- 008Java并發容器
- 009Java的線程實現
- 010Java關鍵字synchronized
- 011一些并行模式的熟悉
- 單例模式和不變模式
- 生產者消費者模式
- Future模式
- 012一些并行算法的熟悉
- 面試總結
- 長亮一面