FLAGS

MENU

NOTICE

2009年7月5日日曜日

(プログラムネタ) マルチスレッドプログラム (mixi05-u459989-200907051327)

ミクシ内で書かれた旧おかあつ日記を紹介します。
(プログラムネタ) マルチスレッドプログラム
2009年07月05日13:27
マルチスレッド対応クラスを設計するときは、必ず、同期オブジェクトの指定ができるようにする必要がある。

1. Javaには特定のオブジェクトに対してひとつのスレッドだけがアクセスしているということを保証するための機構 "synchronization" と呼ばれるものを持っている。 メソッドに synchronized という修飾子をつけると、そのオブジェクト上のメソッドを実行するスレッドが必ずひとつであるということを保証できる。

2. 委譲を使って複雑な多重継承関係を表すことには限界がある。 言語的に多重継承をサポートしていないJava上で多重継承を表現する際、HAS-A / IS-A という二通りの表現方法が考えられる。 HAS-Aで表現するのは比較的簡単である。 IS-A で表現する際は DELEGATION (委譲)という方法を使う以外ない。 委譲はすべてのメソッドに対して転送メソッドを作成する必要があり、作業は複雑である。 委譲を使って複雑な多重継承関係を表すことには限界がある。


3.複数のクラスを組み合わせてあるひとつのマルチスレッド対応のクラスを作成しようとするとき、多重継承を HAS-A で表現してしまうと 同期を取るためのオブジェクトが複数に分かれてしまう。 同期オブジェクトを共通にまとめるためにはすべてのメソッドを委譲を使って実装する以外に方法が無い。

4. 2の理由により、委譲を使った継承関係の表現には限界が生じる。

5.継承関係の表現にHAS-A を使い、かつ、処理の同期をとるためには、そのクラス内で利用されるすべてのマルチスレッド対応クラスが同期オブジェクトの指定する機能を持っていることを必要とする。


==

現状、J2SEのマルチスレッド対応クラスには 同期オブジェクトの指定ができるものは一つも無い。

JAVAにはこういう小さな考慮漏れがたくさんある。 このような小さな考慮漏れがたくさん重なることによって JAVAのマルチスレッドプログラミングがとても複雑になっているのだと思う。


コメント一覧
 
出展 2009年07月05日13:27 『(プログラムネタ) マルチスレッドプログラム』

著者オカアツシについて


小学生の頃からプログラミングが趣味。都内でジャズギタリストからプログラマに転身。プログラマをやめて、ラオス国境周辺で語学武者修行。12年に渡る辺境での放浪生活から生還し、都内でジャズギタリストとしてリベンジ中 ─── そういう僕が気付いた『言語と音楽』の不思議な関係についてご紹介します。

特技は、即興演奏・作曲家・エッセイスト・言語研究者・コンピュータープログラマ・話せる言語・ラオ語・タイ語(東北イサーン方言)・中国語・英語/使えるシステム/PostgreSQL 15 / React.js / Node.js 等々




おかあつ日記メニューバーをリセット


©2022 オカアツシ ALL RIGHT RESERVED