讨论:线程池如何添加线程性能更好

mengyalizuopeng 2017-10-24 11:27:53
现在有一种业务:
比如有一个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有是个对象,每一个处理方法相同,第一种是只实现一个线程接口,然后加锁控制,
第二种十个对象产生十个实现了线程接口的对象,然后全部放在线程池中,
哪一种比较好!

...全文
192 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧