2

私はアプリケーションを開発し、ある時点で、データベースのストレステストを行うために約10000スレッドを開始します。これを次のように同期させたい:すべてのスレッドのテーブルからすべてのデータを読み取り、次にすべてのトレッドが他のスレッドが読み取りを停止するのを待つようにします。すべてのスレッドが読み取りを終了した後、そのテーブルからすべてのレコードを削除し、すべてのスレッドに以前に読み取ったデータを挿入させます。さて、スレッドを同期して、前述の順序で互いに待機するにはどうすればよいですか?最善の解決策は何ですか?

4

2 に答える 2

8

使用CyclicBarrier

CyclicBarriersは、時折互いに待機しなければならない固定サイズのスレッドのパーティを含むプログラムで役立ちます。

上で引用したJavaDocの例は、まったく同じ問題を解決します。


1万スレッド?CPUとメモリではなく、データベースをテストしていることを確認してください(コンテキスト切り替えのオーバーヘッドが非常に大きくなる可能性があります)。分散モードでを検討しましたか?

于 2012-07-24T08:41:27.077 に答える
3

これはあなたが探しているものとは正確に一致しないかもしれませんが、CountDownLatchの外観を与えることができます

他のスレッドで実行されている一連の操作が完了するまで、1つ以上のスレッドが待機できるようにする同期支援。

于 2012-07-24T09:08:05.060 に答える