У меня есть следующий кодThreadPoolExecutor Реализация для метода с ArrayList Параметр
private List<String[]> userList2 = new ArrayList<String[]>(10000);
ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 10, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(5), new ThreadPoolExecutor.CallerRunsPolicy());
Query Database
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 Я хочу run doBilling в 10 потоках параллельно, чтобы он мог достичь 10000 записей с большой скоростью. Но этого не происходит !!! Пожалуйста, предложите что я делаю не так и как это должно быть решено ..
Заранее спасибо
Так что я должен использовать цикл внутри метода выполнения ?? –
@MadanMadan см. Мое обновление –
@Vishal .. Большое спасибо .. Итак, по вашему коду elist это новый ArrayList, который назначается каждому отдельному потоку и с помощью userList2.size()% 1000 == 0 сможет параллельно запускать doBilling метод ... который запускает 1000 в каждом потоке .. ?? Не так ли? –