多线程数据同步问题

wula0010 2011-01-25 12:47:55
代码如下,其中pro是读写文件的操作,运行后发现并没有同步,该如何解决?谢谢

public class MonitorThread extends Thread {
private final byte[] lock= new byte[0];
......
public void run() {
... ...
synchronized (lock) {
IniFileProcessor pro = new IniFileProcessor(path);
String currStation = "station" + getI().toString();
String currStat = "";
if (success.equals("1")) {
pro.updatePropettyValue(currStation, "stat", "0", null);
pro.updatePropettyValue(currStation, "mail", "0", null);
} else {
if (pro.getPropertyValue(currStation, "stat") != null) {
currStat = pro.getPropertyValue(currStation, "stat");
}
logger.info(RelativeDate.getDateString(new Date(), "yyyy-MM-dd HH:mm")+"....。");
currStat=Integer.toString(Integer.parseInt(currStat)+1);
pro.updatePropettyValue(currStation, "stat", currStat, null);
}
pro.saveFile();
}
... ...

...全文
61 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wula0010 2011-01-25
  • 打赏
  • 举报
回复
问题解决了,谢谢楼上。
qingkangxu 2011-01-25
  • 打赏
  • 举报
回复
你这个lock是每个线程私有的,每个线程run的时候只是lock自己,别的线程再次运行。肯定是能够运行的。
private final byte[]  lock= new byte[0];


你可以把
private final byte[]  lock= new byte[0];

public static final byte[]  lock= new byte[0];

试试,应该就能同步。

但是这支持试试而也,真真用同步的时候不一定就必须这样用,你要做的就是保证你的线程里用的lock是所有线程都能访问的且共用的一个lock就行。

62,614

社区成员

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

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