日期:2014-05-17  浏览次数:20997 次

多线程操作数据库
为防界面假死,我准备用多线程执行数据库操作。
如果一个线程在循环添加多条数据,还没执行完的时候又一个线程去删除一条数据,有一种情况是要删除的那条还没添加进去。这个问题有什么好的解决方案?
------最佳解决方案--------------------
你插入表的操作不用事务处理的吗,假如中途失败,你下次再插入不是重复了,或者主键重复的时候,根本就报错。
用事务处理吧,删除操作得等到插入完了才行。简单省事。
------其他解决方案--------------------
如果操作全部是 insert update delete,为何不打包进行事务操作而是一条一条执行?
------其他解决方案--------------------
1.用数据库的事物,就可以正常了。
2.你要用 look()
{

}

------其他解决方案--------------------
使用多线程解决界面死锁,不等于必须引入无序的操作,你所有的数据库操作可以都在一个线程里执行(可以使用一个列表将界面操作生成的数据库操作命令排序起来,该线程依次执行)
------其他解决方案--------------------
那就排序,让指定的部分顺序执行,另外加锁和一定得判断。没有的话当然不能删除了。异步就得做好各种情况的处理。
------其他解决方案--------------------
你必须保证这个操作的顺序,或者线程加锁,或者数据库加锁
------其他解决方案--------------------
这个,得看你数据库的设计或程序结构设计了。比方说,这次要删的数据,数据库里不存在,下次线程走这里再删掉也行。
------其他解决方案--------------------
你这貌似是个逻辑错误。
------其他解决方案--------------------
引用:
你这貌似是个逻辑错误。


涉及到控件,批量添加的那些数据已经记录下来了,删除的时候传参,操作快的话是很有可能的。
------其他解决方案--------------------
引用:
那就排序,让指定的部分顺序执行,另外加锁和一定得判断。没有的话当然不能删除了。异步就得做好各种情况的处理。


怎么确保一个线程在令一个线程结束后才能执行
------其他解决方案--------------------
引用:
你必须保证这个操作的顺序,或者线程加锁,或者数据库加锁


多线程刚入门,怎么确保一个线程在令一个线程结束后才能执行
------其他解决方案--------------------
引用:
为防界面假死,我准备用多线程执行数据库操作。
如果一个线程在循环添加多条数据,还没执行完的时候又一个线程去删除一条数据,有一种情况是要删除的那条还没添加进去。这个问题有什么好的解决方案?

删除的时候应该先遍历需要插入数据库的数据队列,如果数据还没插入,就直接在队列中删除。