3

Java Executor のない生活では、Runnable タスクごとに新しいスレッドを作成する必要があります。新しいスレッドを作成するには、スレッドのオーバーヘッド (作成と破棄) が必要であり、Executor 以外のプログラムに複雑さと無駄な時間を追加します。

コードを参照する:

Java Executor なし -

new Thread (aRunnableObject).start ();

Java Executor を使用 -

Executor executor = some Executor factory method;
exector.execute (aRunnable);

要するに、Executor はスレッドの管理方法の低レベルの詳細を抽象化するということです。

本当?

ありがとう。

4

3 に答える 3

11

要するに、Executor はスレッドの管理方法の低レベルの詳細を抽象化するということです。本当?

はい。

これらは、スレッド オブジェクトの作成、スレッドのプールの維持、実行中のスレッド数の制御、正常な/正常でないシャットダウンなどの問題に対処します。これらを手作業で行うのは簡単ではありません。

編集

これを行うと、アプリケーションの正確なニーズに合わせて完全に調整されたカスタム実装と比較して、パフォーマンス ヒットがある場合とない場合があります。しかし、可能性は次のとおりです。

  1. カスタム実装は完全に調整されていません。
  2. とにかく、パフォーマンスの違いは重要ではありません。

さらに、Executor サポート クラスを使用すると、対処が必要な問題が発生した場合に、さまざまなパラメーター (スレッド プール サイズなど) を簡単に調整できます。Executor を使用することによってガベージ コレクションのオーバーヘッドがどのような影響を受けるかはわかりません。

原則として、アプリケーションを単純かつ堅牢に作成することに集中する必要があります (たとえば、高レベルの同時実行サポート クラスを使用するなど)。パフォーマンスについて心配する必要があるのは、次の場合のみです。

  1. アプリケーションの実行が「遅すぎる」、および
  2. プロファイリング ツールは、特定の領域に問題があることを示します。
于 2010-08-11T00:27:52.947 に答える
1

通常のスレッドに対するエグゼキュータのいくつかの利点。

  1. スロットリングは、ThreadPools のサイズを変更することで簡単に実現できます。これにより、アプリケーションを流れるスレッドの数を制御/チェックし続けることができます。アプリケーションの耐荷重のベンチマークを行う場合に特に役立ちます。
  2. RejectionHandlers を使用すると、Runnable タスクをより適切に管理できます。
于 2010-08-11T07:15:56.857 に答える