クラスタによって引き起こされる一連の問題(マルチスレッド記事 - より遅いシングルスレッドマルチスレッド)

複数のスレッドを使用して、クラスタの効率を高めるために、それはいくつかの理解のマルチスレッドの添加の過程で、必要です

まず、複数のスレッドの数が多いMath.random()を使用しないようにしよう。Math.random()は、CASメカニズムを使用するので、使用頻度が遅く実行スレッドにつながる可能性があるからです。そして、シングルスレッドのコードが同じ乱数を複数生成し、セルフテストマルチスレッドコードを記述することができ、あなたはマルチスレッド実行速度がより遅くなるでしょうシングルスレッド。

第二に、複数のスレッドが、特に理由は明確ではないとJVMの知識を伴うことが、多数のオブジェクトを作成しないでください、私はマルチスレッドコードを書いていて、新しい生成されますCollectionsUtils.retainAll(リスト、一覧)メソッドで呼び出すことによるものですCollectionオブジェクト、作成された、あまりにも多くのオブジェクトで、その結果、スレッド実行方法の過程であまりにも多くの時間を呼び出すシングルスレッドより遅いマルチスレッドの実行効率が得られ。最後に、ThreadLocalのはリスト、再書き込みがretainAllメソッドを保存用いて、各々がThreadLocalのリスト、最初の明確な再利用から取得し、マルチスレッドの実行速度が大幅に向上します。

各実行メソッドは、スレッドプールコミット使用しながら第三に、データのクラスタリングの大量が、各実行時間は、ミリ秒のみで数十、短い、スレッドの実行は、次の実行スレッドの初期化と資源循環時間の中央に終了しますより無駄にし、したがって、データは、データスレッドに割り当てられるべきである、または各スレッドが実行を取得する必要があり、実行はしばしばメソッドが呼び出され、コミットではなく、一度完了した後に継続します。私の解決策は、(データセットが配列である)同じデータを取らないことを確実にするためのAtomicIntegerを使用することです。

 

おすすめ

転載: www.cnblogs.com/fiftyonesteps/p/11424508.html