0

サンプルコード:

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 つのスレッドが実行されています。しかし、問題は、スレッドが処理を完了すると、スレッドが永久に待機状態になり、処理のために次のタスクを取得しないことです。上記のコードの何が問題になっていますか?

提案してください...

4

1 に答える 1

0

It was my fault only when I was assigning a connection to the thread from Connection Pool then I was not closing it when thread is done with processing. When I closed connection at end of a thread then it started working and threads are properly being assigned for next tasks.

于 2012-11-15T21:09:46.653 に答える