目次
1. 基本的な論理関係
A ⇒ B(AならばB)の場合:
- AはBの十分条件
- BはAの必要条件
2. 集合論における表現
A ⇒ B は A ⊆ B と表せる(AはBの部分集合)
ベン図による表現
+------------------+
| B |
| +--------+ |
| | A | |
| +--------+ |
| |
+------------------+
3. 具体例:不変性とスレッドセーフ性
不変なオブジェクト(A)の例
- String
- LocalDateTime
- Integer
- BigDecimal
スレッドセーフなオブジェクト(B)の例
- 不変オブジェクト
- 同期化されたリスト
- アトミック変数
- ThreadLocal
4. 包含関係
- A ⊆ B(不変オブジェクトは全てスレッドセーフ)
- B ⊇ A(スレッドセーフなオブジェクトは不変オブジェクトを含む)
5. 成り立たない関係
B ⇒ A(スレッドセーフならば不変、は成り立たない)
反例
- Vector(スレッドセーフだが可変)
- ConcurrentHashMap(スレッドセーフだが可変)
6. 数学的表現
- A ⇒ B は真
- B ⇒ A は偽
- A ⊆ B は真
- B ⊆ A は偽
7. 結論
- A(不変性)はB(スレッドセーフ性)の十分条件
- B(スレッドセーフ性)はA(不変性)の必要条件ではない
- A(不変オブジェクト)はB(スレッドセーフオブジェクト)の部分集合
- B(スレッドセーフオブジェクト)はA(不変オブジェクト)を包含する
これらの関係から、不変オブジェクトはスレッドセーフであるが、スレッドセーフなオブジェクトが必ずしも不変であるとは限らないことがわかります。