0

私はJavaで並列スレッドのセットを実行しようとします。javaの複数の並列スレッドは終了しません

このメソッドは、数分ごとに呼び出されます。数分後に何百ものスレッドを作成します。すべてのスレッドは20秒間だけ実行されます。しかし、私のデバッグは、彼らが終了したことがないことを示したと、そのため私はこの例外を取得:事前

+3

*すべてのスレッドは20秒間実行されます。私のデバッグは彼らが決して終わらないことを示しました。*これらのステートメントは互いに矛盾します。 'f'が何をしているのか分からないので、大いに役立つことはありません。 – shmosel

+2

いくつかのアドバイス:意味のある変数名を使用してください!また、完全な例を提供してください。 –

+0

デバッガを使用する場合は終了しなければならないスレッドを中断し、どのステートメントがハングするかを調べます。 –

答えて

0

私の解決策は、すべてのスレッドに余分なJDBC接続を与え、それらを共有させないことでした。これはデッドロックを解決し、期待通りに終了します。

+0

何ですか?ドレッドロック? –

+0

あなたは深刻ですか? – caesar

+0

この質問と回答は、他の誰にもほとんど役立ちません。あなたはあなたの質問にJDBCについて言及していません。後世のための編集を検討する。 – Gray

1

で、私は問題がないと思う

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です。

+1

is not it 10/4 = 2.5 =>(int)2? – caesar

+0

@caesarはい、更新された回答。 –

+0

よろしくお願いします。これは正しいですが、私の場合は常にN >>カウントになりますが、これは起こりません;) – caesar

関連する問題