
2。数据库采用事务处理表中的数据
3。采用共享方式打开数据库,不是以独占方式打开数据库
建立一个mysql连接表加上一个临界区,表结点是这样的(mysqlcon,bool),根据实际情况定大小。我用的是10个连接。
当要进行mysql *** 作时,就从表中取出一个闲置的mysql连接,并把bool量改为true,使用完后改成false,临界区的做用是保障一个mysql连接一次只能被一个线程使用。
设置conn.autocommit(false)这样就不会存在自动提交 也就是说 你的 *** 作还只是内存 *** 作 别人看到的只能是没有变化的表 直到你循环完毕用conn.commit()
楼上的解释不太对。多线程虽然是最终单cpu执行,但是cpu执行并不是1 次处理完1个线程才到第2个的,多线程处理时候,cpu把各线程再分成片段,处理完1线程第一片段就到线程2第1片段,如此循环。至于楼主问题,冲突可能性是存在的,数据库一般是并发只读,如果有写入,默认锁表或者锁行。此时排他写 *** 作。完毕以后解锁。如果写进程不幸锁死或者过长,会导致其他线程无法写入。因此,冲突发生的概率其实和写过程复杂度相关,和并发写请求多少相关,如果后台100个线程写入的话,冲突几率还是有的,如果调试能监控到拒绝写入错误,建议单进程负责写入,其他工作线程提交请求至写入线程轮候输入。解决写入冲突问题。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)