Opera 9.64 Build 10487のJVM 1.6.0_12で動作するアプレットのスレッドダンプがあります.3つのイベントキューが表示されます。私が知っている限り、Java Swingのイベント処理はシングルスレッドです - この変更は最近更新されましたか?複数のAWTイベントキューを使用できますか?
私の問題は、複数のイベントキューがデッドロックを引き起こす傾向があるということです。なぜなら、私はGUIのTreeLockだけよりもいくつかのロックを持っているからです。
Opera 9.64 Build 10487のJVM 1.6.0_12で動作するアプレットのスレッドダンプがあります.3つのイベントキューが表示されます。私が知っている限り、Java Swingのイベント処理はシングルスレッドです - この変更は最近更新されましたか?複数のAWTイベントキューを使用できますか?
私の問題は、複数のイベントキューがデッドロックを引き起こす傾向があるということです。なぜなら、私はGUIのTreeLockだけよりもいくつかのロックを持っているからです。
複数の可能性があり、ブラウザによって異なります。 EventQueue documentation:
いくつかのブラウザは、異なるコードベースのアプレットを別々のコンテキストに分割し、これらのコンテキスト間に壁を確立します。このようなシナリオでは、コンテキストごとに1つのEventQueueが存在します。他のブラウザでは、すべてのアプレットを同じコンテキストに配置します。これは、すべてのアプレットに対して単一のグローバルEventQueueが存在することを意味します。この動作は実装依存です。
はい。通常、Toolkit.getDefaultToolkit
にはToolkit
が1つだけありますが、から複数のEventQueue
があります(1.2.2から通常は正常に呼び出すためのアクセス権があります)。スタックにはとClassLoader
に基づく魔法があり、返すものはEventQueue
です。
アプレットは、その起源と構成に応じてパーティション化されます。これがどのように行われるかは、実装に依存します。
ここでは、おそらくあなたのアプレットのイベントキューとセキュリティ保護されたコンテキストが表示されます。安全なコンテキストは、プラグイン自体のダイアログボックスを処理します。証明書やそのようなものを受け入れる。安全なコンテキストは、これらをアプレットコンテキストのユーザコードから遠ざけます。
さらに、モーダルダイアログを表示すると、新しいEventQueue(およびスレッドIIRC)が作成されます。このイベントキューは、モーダルダイアログが閉じられるまでアクティブです(前のイベントキューは「保留」です)。
しかし、いくつかのレベルのモーダルダイアログ(1つのメインキュー+ダイアログあたり1つのキュー、または1つのメインキュー+すべてのダイアログの1つのキュー)を使用しているときに何が起こるかわかりません。
"実際には間違っています。モーダルダイアログを表示すると、新しいEventQueue(スレッドIIRC)が作成されます。私はこれまでSwingの男と話しましたが、Swingは既存のイベントキューに新しいフィルタを追加して、異なるソース(ウィンドウ/コンポーネント)からのイベントをフィルタリングします。したがって、モーダルダイアログには新しいスレッド/ EQは作成されません。これを確認するには、モーダルダイアログを開き、モーダルダイアログの前後でスレッドダンプを取得し、AWTスレッドコールスタックを比較します。少なくとも、それは標準的なJavaアプリケーションとの関係です。私はアプレットケースをまだチェックしていませんでした。
これは説明になります。しかし、アプレットは1つしかないので、コードベースは1つだけです。おそらくオペラはフレームごとに1つのスレッドを開始します - それはJavaスクリプトの場合と同様です – tigger