讨论:线程池如何添加线程性能更好
现在有一种业务:
比如有一个LIST里面有100个要处理的对象;
第一种把list放在一个线程中,然后加入线程池中
//每一个处理的业务逻辑相同。
public class ListRun implements Runnable{
List list = new ArrayList<Onject>();
@Override
public void run() {
int rows = list.size();
while(true){
synchronized (list) {
if(rows>0){
//处理list业务,比如计算后插入数据库
}
rows--;
}
}
}
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(5);
service.submit(new ListRun());
service.shutdown();
}
}
第二种:
public class ListRun2 implements Runnable{
@Override
public void run() {
//处理list业务,比如计算后插入数据库
}
public static void main(String[] args) {
List list = new ArrayList<Object>();
ExecutorService executorService = Executors.newFixedThreadPool(5);
for(int i=0;i<list.size();i++){
executorService.submit(new ListRun2());
}
}
}
比如list有是个对象,每一个处理方法相同,第一种是只实现一个线程接口,然后加锁控制,
第二种十个对象产生十个实现了线程接口的对象,然后全部放在线程池中,
哪一种比较好!