【多线程】什么时候使用多线程

java多线程,假设一个list有1W条数据, 现在我想用多线程不重复的读取list中的数据,要怎么写?

/*现在这个写法会生成1W个线程,但我想使用4个线程*/
public static void main(String[] args){
//Email是一个实体类,包含username password两个属性

List<Email> emailList = new ArrayList<Email>();//假设list中有1W条数据
for (Email email : emailLit) {
new Thread(new Run(email)).start();
}
}
class Run implements Runnable{
@Override 
public void run() { 
synchronized (email) { 
System.out.println(Thread.currentThread().getName()+" email--"+email.getUserName());
}
}

一般没有必要用多线程的 除非你的程序有什么地方或被拥塞。 就你这个例子来看,没必要多线程,因为Run方法很简单,处理耗时很短。 如果非要多线程,可以维护一个共享的index变量,保证每个线程获得index时都不重复。

class EMailList{
private List<EMail> list; // 通过构造函数或setter赋值.
private int index = -1;
synchronized public int getIndex(){
return index++;
}
public Email getEMail(){
int i = getIndex();
if(i<list.size()){
retur list.get(i);
}else { return null; }
}
}
class Run implements Runable{
private EMailList hander; //通过构造函数赋值.
public void run() {
EMail email = hander.getEMail();
while(email != null){
email = hander.getEMail();
}
}
}
// main方法中
EMailList hander = new EMailList(emailList);
for(int i=0; i<4; i++){
Run run = new Run(hander);
new Thread(run).start();
}

个人认为需要使用多线程的地方是在: 1.程序遇到阻塞的情况,如 i/o 读写阻塞; 2.程序某个地方执行花费比较长的时间;

转载于:https://my.oschina.net/v512345/blog/983047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值