0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaの「Immutableならばスレッドセーフである」から賢くなろう

Posted at

目次

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(不変オブジェクト)を包含する

これらの関係から、不変オブジェクトはスレッドセーフであるが、スレッドセーフなオブジェクトが必ずしも不変であるとは限らないことがわかります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?