|
6/13 最終日 |
||
今日で JavaOne も終わりです。去年より 1 日短いのですが、このくらいの方がいいかもしれません。 今日の General Session は、Sun Microsystems の CEO Scott McNealy です。後半に Jonathan Schwartz が再登場して、Motolora や Nokia といった Mobile 系の企業の方とパネルを行いましたが、おまけみたいなもんです。 また、今日は BOF はなくて Technical Session だけです。それも、4 時には終わってしまいます。 パビリオンはすでに終了していて片付けをしています。刻々と最後の時間が迫ってきているわけです。 それでは、本日のレポートです。
|
Technical Session |
||||||||||
今日、聴講したのは 2 つのセッションです。
Concurrency Utilities は初日に行われたセッションですが、私も締め出されたように、非常に多くの人が聴講できませんでした。それで、今日リクエストセッションとしてもう 1 回、行われることになりました。残念ながら、Doug Lea は NY に帰ってしまったので、代わりに Brian Goetz が講演しました。 TS-2125 Advanced OpenGL for the Java Platform 今年の JavaOne のトピックの 1 つに Game があることは先に述べたとおりです。特に Desktop の Game です。ということは Java のパフォーマンスも Game を作るに十分なほどになったわけです。 以前から 2D のゲームには Java が使用されていましたが、3D のゲームはなかなか難しかったと思います。Java で 3D というと Java3D がありますが、シーングラフがベースになっていることから分かるようにかなり高レベルのライブラリです。これを Game に使用するのは、パフォーマンス的に難しい面があります。そこで、もっと低レベルのライブラリということで OpenGL を直接使用するライブラリが登場するわけです。 セッションでは Java - OpenGL バインディングライブラリのいくつかを紹介しました。紹介されたものを次に示します。
そして、Jungle を使用して、OpenGL のレンダリング手法を Java からコントロールするデモを行いました。最近の 3D の傾向として、Configurability から Programability へと変化してきます。特に、NVIDIA の Cg や DirectX9 の HLSL などのシェーダー用の言語が登場したことでこの傾向が加速しています。デモは
に関して行われました。デモに使用したのは Virtual Fishtank や NVIDIA の Phong Lightnig などです。すべて、Java からコントロールされているものです。
TS-3708 Concurrency Utilities - Multithreading Made Easy Doug Lea を直接拝めなかったのは残念ですが、とりあえず聴講できたのでよかったです。 Concurrency Utilities は Tiger に含まれる、マルチスレッド用のユーティリティです。もともと Doug Lea が作成していたものをベースに、JSR-166 で標準化されるという経緯をたどっています。 パッケージは java.util.concurrent になります。また、util のサブパッケージが 1 つ増えました。util の下はどんどん増えていきます。 Concurrency Utilities では次のような API を提供します。
まず Executor ですが、Thread の代わりに非同期に処理を実行するインタフェースです。実際にはユーティリティクラスの Executors から実行することが多いようです。Executor が扱えるのは Runnable インタフェースと新しく導入された Callable インタフェースです。 Callable インタフェースは Runnable の代わりに使うことができますが、どちらかというと処理を中心にしたものです。Callable で実行した結果は Futures インタフェースの get メソッドを使用して取り出すことができます。
Thread Pool を待ち望んでいた人は多いのではないでしょうか。こんな風に使います。
この例では 7 つのスレッドをプールしています。 Queue インタフェースは次のように定義されています。
このインタフェースを実装したクラスは
また、Queue インタフェースを派生させた BlockingQueue インタフェースも提供されます。多分、パッケージは java.util.concurrent だと思うのですが、言及しませんでした。
BlockingQueue を使用すれば wait - notify を使用せずに Producer - Consumer モデルを簡単に実装できます。例えばこんな感じです。 コード中の青字の部分が Producer、緑が BlockingQueue、赤が Consumer になります。また、この例では BlockingQueue のコンクリートクラスとして LinkedBlockingQueue クラスを使用しています。
BlockingQueue インタフェースで使用されている TimeUnit クラスはナノ秒までサポートした時間を表わすクラスです。このクラスは java.util.Date クラスや System#currentTimeMillis() メソッドとは関係がありません。 次は Lock です。
コンクリートクラスとして ReentrantLock が提供されています。Lock のサンプルを次に示します。
入出力の時に使用される ReadWriteLock インタフェースもあります。 同期化を行うクラス群は特定の場面で使われるようなクラスを集めたものです。次のようなクラスが提供されています。
Semaphore は許可を持ったオブジェクトみなすことができます。はじめに許可を許す数を設定しておきます。acuire で許可を取得し (許可が取得するまでブロックします)、release で開放します。 通常は Lock と一緒に使用されます。次の例はリソースプールの例です。
その他に Atomic やスレッドセーフのコレクション (ConncurrentHashMap や CopyOnWriteArrayList などがあります。また、リソースの消費を防ぐために ThreadLocal#remove メソッドが新たに導入されています。
|
おまけ |
|||
今日の General Session のオープニングはアフリカ系の音楽を演奏するバンドでした。純粋にアフリンカンミュージックではないのですが、まぁそんなことはどうでもいいです。 何がすごいって、パーカッションです。和楽器の鼓のように、太鼓の紐を締めたり緩めたりすることで音程が変えられるのですが、とても器用に音程を変えるのです。はじめ、エレクトリックタムがあるのかと思ったぐらいです。どこを探しても、普通のドラムとパーカッションしかないのです。結構、ビックリです。 ところで、JavaOne は常に大スクリーンにいろいろ映しています。General Session などは誰を映せばいいかすぐ分かると思うのでカメラマンも楽なのでしょうが、バンドの映像は全然ダメ。 誰がリードとっているかをまったく理解していないのです、ギターがリードを取っているときにベースを撮ってみたり、パーカッションのパートでホーンセクション撮ってみたり。もうちょっと勉強してきなさいという感じです。 何はともあれ、今年の JavaOne は終わってしまいました。今年は Scott McNealy がいっていたように、開発者向けになって、原点回帰をしたように思います。プログラムを見てもビジネスセッションが非常に減っています。 この傾向は私にとっては非常に望ましいものです。来年もあまり浮かれたお祭り騒ぎの JavaOne よりも、今年の延長線上であることを切に願っています。 来年は 6/28 から 7/1 です。
(2003.6.13) |
|