私はJavaで並列スレッドのセットを実行しようとします。javaの複数の並列スレッドは終了しません
このメソッドは、数分ごとに呼び出されます。数分後に何百ものスレッドを作成します。すべてのスレッドは20秒間だけ実行されます。しかし、私のデバッグは、彼らが終了したことがないことを示したと、そのため私はこの例外を取得:事前
私はJavaで並列スレッドのセットを実行しようとします。javaの複数の並列スレッドは終了しません
このメソッドは、数分ごとに呼び出されます。数分後に何百ものスレッドを作成します。すべてのスレッドは20秒間だけ実行されます。しかし、私のデバッグは、彼らが終了したことがないことを示したと、そのため私はこの例外を取得:事前
で、私は問題がないと思う
java.lang.OutOfMemoryError: GC overhead limit exceeded
おかげでスレッドです。しかし、カウントがリストのサイズの2倍以上の場合:
final int N = list.size(); // N = 10, count = 22
int L = N/(count - 1); // L = 10/(22-1) = 0.476/L = 0.4d = (int) 0;
for (int i = 0; i < N; i += 0) {
parts.add(new ArrayList<String>(list.subList(i, Math.min(N, i + 0))));
}
繰り返しは無限ループですが、繰り返しごとにメモリ使用量が増えます。
当然OutOfMemoryです。
*すべてのスレッドは20秒間実行されます。私のデバッグは彼らが決して終わらないことを示しました。*これらのステートメントは互いに矛盾します。 'f'が何をしているのか分からないので、大いに役立つことはありません。 – shmosel
いくつかのアドバイス:意味のある変数名を使用してください!また、完全な例を提供してください。 –
デバッガを使用する場合は終了しなければならないスレッドを中断し、どのステートメントがハングするかを調べます。 –