多线程同时向oracl数据插入数据

zs913956560 2014-06-22 07:44:45
今天写了个小程序,多个线程同时向数据库插入数据,比如200个进程同时插入数据,为什么有时只有16条成功,有时50多条?
还有个问题,请问,多一张表同时进行更新和插入操作时,会出现锁的情况吗?
public class ThreadTest {
@org.junit.Test
public void begin(){
ApplicationContext ac =new ClassPathXmlApplicationContext("/spring/*.xml");
IDao dao = (IDao) ac.getBean("dao");
List<MyThread> mts = new ArrayList<MyThread>();
//创建200个插入的进程,200个更新的进程
for(int i=0;i<200;i++){
MyThread myi = new MyThread("插入进程","insert into come_on (id,name,status) values(?,?,?)",dao);
// MyThread myu = new MyThread("更新新进程","update into come_on set id = ?,name = ?,status = ?",dao);
mts.add(myi);
// mts.add(myu);
}
for(int i=0;i<mts.size();i++){
mts.get(i).start();
}
}
}
求大神帮忙
...全文
288 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-06-23
  • 打赏
  • 举报
回复
底层操作没有弄过,这能提点看法供你参考 数据库客户端能支持并发的请求吗?是指应用程序到客户端,而不是客户端到服务器 如果不能,那么你程序的所有请求都会停留在你的程序里,等待客户端空闲 如果能,那么并发的路数也是有限制的,依然有一个等待问题 所以你得在线程中判断请求是否真实的发送出去了,如果是需要有返回数据的,还需等待数据的返回
zs913956560 2014-06-22
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
共用一个,肯定是要排队的了 你的线程又不是同步的,弄不好还没执行就中断了
public class Work { private String sql; private IDao dao; public Work(String name,String sql,IDao dao){ this.sql = sql; this.dao = dao; } public synchronized void doWork(){ if(sql.substring(0, 4).equals("insert")){ dao.getJdbcDao().insert(sql, "i","i","i"); }else{ dao.getJdbcDao().update(sql,"i","i","i"); } } } 我对改方法进行了同步的操作,可是为什么还是会出现之前的情况呢?排队具体是要怎么操作的
xuzuning 2014-06-22
  • 打赏
  • 举报
回复
共用一个,肯定是要排队的了 你的线程又不是同步的,弄不好还没执行就中断了
zs913956560 2014-06-22
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
200个线程公用一个数据库连接吗?
是的,公用一个的。
zs913956560 2014-06-22
  • 打赏
  • 举报
回复
是的,公用一个的。为什么会这样?
xuzuning 2014-06-22
  • 打赏
  • 举报
回复
200个线程公用一个数据库连接吗?

5,657

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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