0

私は1つの親スレッドと1つの子スレッドを持つ1つのコードを開発しています.今、私のシナリオは以下のようなものです.

  • 親スレッドは子スレッドを開始します
  • 子スレッドを開始した後、それが何をしているのかを継続的に処理します。
  • ここで、子スレッドがメインスレッドでメソッドを呼び出したい場合が1回発生します
  • 次に、そのメソッドを使用してメイン スレッドを非同期的に呼び出します。

また、Javaの同時実行パッケージを知っているが、同期的に実行していることを明確にしたい。つまり、メインスレッドは実行が完了するまで子スレッドを待たなければならないが、子スレッドの実行中にメインスレッドに継続的な作業をさせたい.

私の実装はSwingWorkerJavaのスレッドのようなものです

4

1 に答える 1

2

「メインスレッドでメソッドを呼び出す」ことはできません。あなたができる唯一のことは、メインスレッドが独自のイニシアチブによって、子スレッドによって提供されたオブジェクトでメソッドを実行する特定のメカニズムを実装することです。

上記は、Swing のメカニズムが行うことを大まかに説明したものです。「メイン」スレッド (この場合、イベント ディスパッチ スレッド) は、グローバル キューからオブジェクトをデキューし、オブジェクトのタイプが適切な場合はrun、関連する のインスタンスでメソッドを呼び出しますRunnable

要点: Swing では、EDT は「実行中の作業を続行」しません。具体的には、他のスレッドがこのメカニズムを介して何をすべきかを伝えるのを待ちます。それ以外の場合は、何もせずに単にブロックします。

于 2014-10-22T12:58:20.230 に答える