多进程锁问题

yema55 2004-12-31 09:34:26
多个客户端共享一个数据库,多个客户端同时只能有一个进行一个高级操作(与数据库无关的操作)
因此,我想把一个布尔变量存入数据库,有人要进行高级操作就先读取这个变量
然后设值,再进行操作。但是因为有可能两个客户端同时读取到这个变量为假,在同时设值,
问题依然得不到解决。请大虾帮忙。
...全文
321 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yema55 2004-12-31
  • 打赏
  • 举报
回复
server需要clustering, 所以还是不能使用server的线程同步
ChDw 2004-12-31
  • 打赏
  • 举报
回复
你可以这样:
在数据库中有一个表A,里面只有一个字段C1

在需要锁定之前,在客户端
conn.setAutoCommit(false);
PreparedStatement prep = conn.prepareStatement("update A set C1=C1");
prep.executeUpdate();
prep.close();
//开始做你的事情;
//做完以后
conn.commit();
conn.setAutoCommit(true);


这样就可以依赖于数据库的锁来完成了,因为第一个用户一旦执行了executeUpdate,数据库已经锁定该表,后面的用户是不能再Update这个表的,他们会处于等待状态
shd4191 2004-12-31
  • 打赏
  • 举报
回复
一种方法是用DBMS的并发控制,一种是再加一个Server程序进行同步控制。
yema55 2004-12-31
  • 打赏
  • 举报
回复
synchronized好像是单客户端内部的多线程同步,
多个客户端之间应该没有用
wjsfr 2004-12-31
  • 打赏
  • 举报
回复
把读取和写入操作放到synchronized中试试
晨星 2004-12-31
  • 打赏
  • 举报
回复
你的程序是什么结构啊,用多线程不行吗?为什么一定要使用多进程?
晨星 2004-12-31
  • 打赏
  • 举报
回复
使用同步的(synchronized)代码段行不行?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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