0

2 つのスレッドを結合するということは、一方のスレッドがタスクを完了すると、もう一方のスレッドが完了することを意味します。したがって、join() で原子性を実現します。では、なぜそれだけで十分ではないのでしょうか。どのような場合に join() を使用する必要がありますか?

4

3 に答える 3

3

参加する理由 ジョインは、メイン スレッドが一連の並列タスク スレッドを起動して一部の作業を高速化したい場合に便利です。メイン スレッドは、タスク スレッドと「結合」します (つまり、スレッドがタスクを完了して終了するのを待ちます)。そうすれば、タスクが完了したことを認識して先に進むことができます。

たとえば、ポータルのホームページは、さまざまなソースからのデータを表示する一連のウィジェットをロードする必要がある場合があります。これを実装する 1 つの方法は、要求処理スレッドが並列タスク スレッドを起動してデータを取得することです。こうすることで、ユーザーは、すべてのデータが順次ロードされるのを待つ代わりに、最も遅いタスク スレッドよりも長く待つ必要がなくなります。要求処理スレッドはこれらのスレッドと結合して、ホームページを表示する前にすべてのウィジェットが必要なデータを持っていることを確認します。

データの不一致について。タスク スレッドがすべて共有データにアクセスしている場合、それらが相互に衝突しないようにする何らかの方法が必要です。他のスレッドがタスク スレッドの完了を待っているという事実は、そのモッシングを妨げません。(モッシュ =競合状態)。

于 2013-09-22T05:43:58.207 に答える
0

原子性とは、スレッドが特定の順序で終了する必要があるという意味ではありません。これは、操作をアトミックに実行する必要があり、2 つのスレッドが他のタスクに干渉してはならないことを意味します。そして、これはsynchronizedブロックAtomicIntegersなどを使用して実現されます。

于 2013-09-22T05:46:47.420 に答える