あらかじめご迷惑をおかけしています。私はPythonからマルチプロセッシングについて学びましたが、Javaのアプローチを理解するのに少し問題があります。 Pythonでは、私は4つのプロセスのプールをしたいと私のプログラムに仕事の束を送信し、それは一度に4つの項目で動作すると言うことができます。私は、Javaでは、この同じタスクを達成するためにスレッドを使用する必要があり、これまでのところ本当にうまく機能しているように見えます。問題を理解するJavaスレッド
しかし、私のCPUは100%の利用率を得ていません(彼らは約70-80%です)。私はスレッドを作成している方法を疑っています(コードは同じですpython/javaとprocesesは独立しています)。
for (int i = 0; i < 500; i++) {
Runnable task = new MyRunnable(10000000L + i);
Thread worker = new Thread(task);
// We can set the name of the thread
worker.setName(String.valueOf(i));
// Start the thread, never call method run() direct
worker.start();
// Remember the thread for later usage
threads.add(worker);
}
私はhereからそれを取った:Javaでは、私はこのように、私は私が処理したいリスト内のすべての項目のためのスレッドを作成するように、一つのスレッドを作成するかどうかはわかりません。私の質問はこれをスレッドを起動する正しい方法ですか、それともJava自体にスレッドの数を管理させる方法がありますか?誰もが思っているように、私のコードをできるだけ速く走らせたいと思っています。スレッドがたくさん作成されることから生じるかもしれない問題の解決方法を理解しようとしています。これは大きな問題ではなく、Javaフードの下でどのように動作するのか不思議です。
ありがとうございます!
+1ありがとうございます。私はスレッドに関してこの気持ちを持っていましたが、私がそれらの産卵をコントロールすることができなかったので(私がそれをやっていたやり方で)、私はハックしてそれをもっとテストすることができませんでした。私はエグゼクティブがまさに私がこれを行うために使えるものだと思います。もう1つの質問(やや関連しています)は、エグゼキュータがスレッドの静的な数を管理していますか、または余分な容量がある場合、exectorは必要に応じてスレッドを自動的に起動しますか? –
固定スレッドプールを作成するのか、キャッシュドスレッドプールを作成するのかによって、どちらも可能です。 – DNA