サンプルコード:
public class ThreadTest{
public static void main(String ...arg){
try{
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for(int i=0; i < noOfTask; i++){
executor.execute(new ImplRunnable(connectionPool.getConnection()));
}
executor.shutdown();
//Wait for all threads completion
executor.awaitTermination(100, TimeUnit.MICROSECONDS);
}catch(Exception e){
e.printStackTrace();
}finally{
//close database connections etc.
}
}
}
class ImplRunnable implements Runnable{
private Connection conn;
public ImplRunnable(Connection conn){
this.conn = conn;
}
public void run(){
try{
for(int i =0; i < 1000000; i++){
counts++;
}
}catch(Exception exception){
exception.printStackTrace();
}finally{
//close all open statements
try{
conn.close();
}catch(Exception exp){
exp.printStackTrace();
}
}
}
}
私のシステムには 4 つのコアがあるため、プール サイズは 4 で、実行するタスクは 10 個あります。
for ループは 10 個のスレッドを開いていますが、一度に 4 つのスレッドが実行されています。しかし、問題は、スレッドが処理を完了すると、スレッドが永久に待機状態になり、処理のために次のタスクを取得しないことです。上記のコードの何が問題になっていますか?
提案してください...