java 多进程写一个文件_java高并发多线程及多进程同时写入文件研究

本文探讨了Java在多线程和多进程环境下对同一文件进行并发操作的情况。通过FileLock加锁,可以控制文件的并发访问。在Windows和Linux环境中,加锁行为有所不同。在多线程中,未加锁的线程或进程会被阻止写入,而在多进程中,加锁机制更为复杂,涉及到进程级别的锁。Java的FileLock提供了进程级别的文件锁,确保并发访问的正确性。
摘要由CSDN通过智能技术生成

测试&思考:

环境:windows 七、linux centos 6.三、java8html

java多线程同时写一个文件

java高并发环境下多线程同时写入一个文件时,

经过 FileLock 加锁,能够控制对文件的并发操做。同一个JVM,能够共享部份内存java

第一种状况是:一个线程A有对文件加锁,另外一个线程B没对文件加锁

在windows7环境下:(持有锁的能够写文件成功)。

持有锁的线程A会有对文件的操做权限,没加锁的线程B没有对文件的操做权限,会报错退出,以下:linux

java.io.IOException: 另外一个程序已锁定文件的一部分,进程没法访问。

在linux centos 6.3环境下:(均可以写文件成功,表现为数据交叉写入)

互不影响,线程A和B都有对文件的操做权限web

第二种状况两个线程都有加锁

在windows7环境和linux centos 6.3环境下表现同样:(持有锁的能够写文件成功)

一个线程A竞争到锁,会有对文件的操做权限,另外一个线程B没有竞争到锁,没有对文件的操做权限,会报错退出,而不是发生阻塞。以下:shell

java.nio.channels.OverlappingFileLockException

在高并的这种生产状况下,须要捕获这个异常,并处理,以下:windows

while (true) {

try {

flout = fcout.tryLock();

break;

} catch (Exception e) {

//计数等其余操做...

sleep(1000);

}

}

多进程同时写一个文件

若是同为java进程,则是不一样的JVM。不能够共享内存centos

若是同为java进程,一个进程A有对文件加锁,另外一个进程B没对文件加锁

在windows7环境下:(持有锁的能够写文件成功)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值