资源文件的并发访问问题。

windowsDNA 2005-01-16 12:02:18
有一个文件,需要对它进行写操作(追加方式),但如果多个请求对文件同时进行该文件进行请求,会出现资源竞争和死锁,如何有效地避免这种情况的发生,通过何种方式可以有效地避免这个同步问题呢.
我现在的写文件的代码是
File accessLog=new File("C:\\accessLog.log");

//if (!accessLog.exists()){
// throw new IOException();
//}

BufferedWriter bw = null;
try{

String input="newLine";

StringBuffer sb=new StringBuffer(input);

bw = new BufferedWriter(new FileWriter(accessLog,true));
bw.write(sb.toString());
bw.newLine();

}catch(IOException ex){

}finally{
if(bw!=null){

bw.flush();
bw.close();

}


}
请问如何做才能达到这个目的呢?

...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuejunaaa 2005-01-19
  • 打赏
  • 举报
回复
这个问题,我也正在犯愁呢。。。。。。。。。。。。。。。。
我的是从数据库里生成xml文件,
前台只访问xml文件,修改xml文件后还要刷新回数据库,
多个用户又必须都能同时修改



star_str 2005-01-16
  • 打赏
  • 举报
回复
写在线程的方法里面
vgvg 2005-01-16
  • 打赏
  • 举报
回复
把他写到一个同步方法里
windowsDNA 2005-01-16
  • 打赏
  • 举报
回复
jFresH_MaN(我本将心照明月,奈何明月照沟渠!) 你好,这样可以吗?

多用户访问的话与多线程访问一样吗?
jFresH_MaN 2005-01-16
  • 打赏
  • 举报
回复
synchronized(this) {
File accessLog=new File("C:\\accessLog.log");

//if (!accessLog.exists()){
// throw new IOException();
//}

BufferedWriter bw = null;
try{

String input="newLine";

StringBuffer sb=new StringBuffer(input);

bw = new BufferedWriter(new FileWriter(accessLog,true));
bw.write(sb.toString());
bw.newLine();

}catch(IOException ex){

}finally{
if(bw!=null){

bw.flush();
bw.close();

}


}
}
把同步的语句放在synchronized语句块里面
windowsDNA 2005-01-16
  • 打赏
  • 举报
回复
而且我不想把对文件进行写入操作的那个方法写成 static synchronized .的.
windowsDNA 2005-01-16
  • 打赏
  • 举报
回复
这个类,不能写成多线程的。现在的环境是这样的,多个用户同时登陆到一个Web系统中,他们都会随时访问web服务器的一个文件,对他进行写操作,所以这时候就发生了资源访问并发的问题。
如何让这些用户各自的请求能够顺利完成,成功地对文件进行写操作呢?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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