第一章

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

コンピュータは暫くこちらを勉強。
就寝01時30分。起床7時45分。うーん、今年に入ってから毎晩3時ぐらいに就寝・9時頃に起床という生活が続いていたので、朝起きれない・・・。少しずつ朝型に戻していきたい。余り時間が無かったので第一章だけ読む。

ブロッキングI/OとノンブロッキングI/O

データを読み込もうとしたとき、スレッドはデータが得られるまでブロックされる。シングルスレッドのアプリケーションでコレを行うと、全てのリクエストが立ち往生してしまう。そこでノンブロッキングI/Oを使用することになるが、ノンブロッキングI/Oは同期I/Oよりずっと複雑。将来的に言語のスレッドサポートが強化されれば、ノンブロッキングI/Oは不要になっていくはず。

サーブレット

サーブレットは複数のリクエスト(スレッド)から呼ばれるので、スレッドセーフでないといけない。

RMI

まずRMIについての補足。RMIは他のJVMで動いているオブジェクトのメソッドを呼び出す。メソッド引数をバイトストリーム化(パック)し、リモートJVMに送出する。リモートJVMは、引数をアンパックしてリモートメソッドを呼び出す。
リモートメソッドの呼び出しはRMIコンポーネントフレームワークが管理するスレッドのプールから、どれかのスレッドが利用される。"自分が管理するスレッドではない"。複数のスレッドが同じリモートオブジェクトを使ったり、リモートオブジェクトが共通のステートに関わったりする。このため、これらはスレッドセーフでないといけない。

Swing

Swingのコンポーネントはスレッドアンセーフ。ただしSwingフレームワークは全てのGUIコンポーネントへのアクセスを調停し、イベントディスパッチスレッドでのみ利用されるようにしている。