0

次のコードがあります

private List<String[]> userList2 = new ArrayList<String[]>(10000);

ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 10, TimeUnit.SECONDS, 
new ArrayBlockingQueue<Runnable>(5), new ThreadPoolExecutor.CallerRunsPolicy());

データベース クエリ

while (rs.next()) 
{
            data = new String[2];
            data[0] = rs.getString("userid");
            data[1] = rs.getString("email");
            userList2.add(data);

           if(userList2.size()==10000)  //Confusion in this part..
           {

            final List<String[]> elist = new ArrayList<String[]>(userList2);
            executor.execute(new Runnable() {
                public void run() {

                doBilling(con,elist);  //Parallel is not happening here... 

            }
            });

方法があります

doBillng(Connection con,List<String[]> userList)
{

String list[]=null; 
String userid=" ";
 for(int i=0;i<userList.size();i++)
    {
        list=userList.get(i);
        userid=props[0];
        list = BillingDao.billById(uid, con);

    }
}

userlist2 サイズが 10000 の場合、doBilling を 10 スレッドで並行して実行して、10000 レコードに高速で到達できるようにしたいと考えています。しかし、それは起こっていません!!! 私が間違っていることと、これをどのように解決する必要があるかを提案してください..

前もって感謝します

4

1 に答える 1

0

にタスクを 1 つだけ送信しました。これは、が返さexecutorれたときに発生します。その結果、 ArrayList の 10000 要素を処理するために1 つが実行されます!!!!!.if(userList2.size()==10000)true Thread

10 個のスレッドで ArrayList の 10000 要素を実行する場合、コードは次のようになります。

while (rs.next()) 
{
    data = new String[2];
    data[0] = rs.getString("userid");
    data[1] = rs.getString("email");
    userList2.add(data);
    if(userList2.size()% 1000 == 0)  //Check if size is multiple of 1000(obtained by 10000/10)
    {
        final List<String[]> elist = new ArrayList<String[]>(userList2);
        executor.execute(new Runnable() 
        {
            public void run() 
            {
                doBilling(con,elist);  //create new ArrayList and assign it to a seperate thread.
            }
        });
        userList2.clear();//clearing the arrayList so that next time when submitted to executor , new elements are processed.
    }
}
于 2013-02-22T22:43:14.030 に答える