当前位置:编程学习 > JAVA >>

关于多线程问题求解!

在数据库中有个users表,想往里面插入10000条重复记录,分2个线程插入,一个线程插入5000条。
代码如下:


package com.Test;
import java.util.UUID;
import com.Data.Dao.UserDao;
import com.Data.IDao.IUsersDao;
import com.Data.POJO.Users;
import junit.framework.TestCase;

public class Test_SQL extends TestCase {
public void testAa(){
Long sta=System.currentTimeMillis();
creatUsers cu=new creatUsers("线程1开启");
Thread t=new Thread(cu);
creatUsers cu2=new creatUsers("线程2开启");
Thread t2=new Thread(cu2);
t.start();
t2.start();
Long end=System.currentTimeMillis();
System.out.println("用时:"+(end-sta));
}
}
class creatUsers implements Runnable{
private String s;
public creatUsers(String str){
s=str;
}
public void run(){
System.out.println(s);
IUsersDao ud=new UserDao();//这个是封装了JDBC添加数据的方法。
for(int i=5000;i>0;i--){
System.out.println(s+i);
Users u=new Users();//这个是数据库中的users对应的pojo类
u.setId(UUID.randomUUID().toString());
u.setUsername("nnnn");
u.setPassword("mmmm");
u.setStatus(true);
ud.add(u);
}
}
}


控制台输出的结果是:
线程1开启
用时:3
线程2开启
线程2开启5000
线程1开启5000

根据控制台输出的结果得出的结论是:
1.2个线程没有执行ud.add(u),在这个方法的时候卡死了。
2.我要的到线程运行的时间也有误,应该在线程1和线程2运行完成时才 统计输出用时,但是结果显示 线程1开启的时候就统计了用时了。
现在求解怎么回事。该怎么处理 --------------------编程问答--------------------

    public void testAa(){
        Long sta=System.currentTimeMillis();
        creatUsers cu=new creatUsers("线程1开启");
        Thread t=new Thread(cu);
        creatUsers cu2=new creatUsers("线程2开启");
        Thread t2=new Thread(cu2);
        t.start();
        t2.start();
t.join();t2.join();
        Long end=System.currentTimeMillis();
        System.out.println("用时:"+(end-sta));
    }
--------------------编程问答-------------------- 1楼正解,使用join可以解决问题2程序运行时间计算不正确.

问题1两个线程都没有执行add()操作,这个我感觉跟你的UserDao实现有关系,程序运行时有两个线程,会创建两个UserDao对象,这两个对象同时调用add()操作,你是不是在UserDao里加了事务什么的,导致两个线程都不能执行添加操作?

补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,