java 多线程 文件 锁,java 多线程文件加锁,求帮助,

java 多线程文件加锁,求帮助,急,在线等

前提我要写个线程,对多个文件进行写操作。

当有触发某个东西的时候,我就要启动一次这个线程进行写操作。

问题来了,就是前面的还没写完,后面又启动了一个线程进行写操作,这样就不行。(刚好同时对一个文件进行操作)

现在我想要对这个文件加锁,当前面有线程在对这个文件写操作时,就让后面要操作的线程等待,等前面的写完了,我就让后面等待的去操作。

有哪位大神告诉我该怎么实现,光是加把锁不可靠呀,后面的线程就不会等待对此继续操作了,有哪位大神能告诉我该怎么加锁怎么写么?

//对该文件加锁(这是我在网上找的,不行)

FileOutputStream out=new FileOutputStream(file,true);

FileChannel fcout=out.getChannel();

FileLock flout=null;

while(true){

flout=fcout.tryLock();

if(flout!=null){

break;

}

else{

System.out.println("有其他线程正在操作该文件,当前线程休眠1000毫秒");

sleep(100);

}

}

java

多线程

file

加锁

------解决方案--------------------

用LinkedList来装你所有的文件操作线程,然后你开启一个公共的线程,一个一个的处理LinkedList里面的线程,这就有点想线程池,处理完就关闭,不需要对文件上锁  多麻烦嘛

------解决方案--------------------

(1)首先加锁是可以的,你应该调用lock方法,而不是tryLock,因为tryLock尝试获取锁,不过得不到不会等待,就进行下面的操作,lock会一直等待资源,知道资源可用。还有就是你只是代码中只是启用了锁,但是没有释放的代码

(2)为什么要启用那么多线程呢?你如果每次都写到的是同一个文件里面,采用一个LinkedBlockingQueue,需要生成的数据每次添加到队列里面,由一个线程负责写,每次从队列中取一个数据,这个QUEUE本身就是线程安全的

------解决方案--------------------

public class Test implements Runnable{

public static int byteArrayToInt(byte[] b) {

int value= 0;

for (int i = 0; i 

int shift= (b.length - 1 - i) * 8;

value +=(b[i ] & 0x000000FF) <

}

return value;

}

static LinkedList runnables = new LinkedList() ;

public static void main(String[] args){

for (int i = 0; i 

TestFileOutput fileOutput = new TestFileOutput() ;

runnables.add(fileOutput) ;

}

new Thread(new Test()).start() ;

}

public static void add(TestFileOutput fileOutput){

runnables.add(fileOutput) ;

}

@Override

public void run() {

while(runnables.size()> 0){

runnables.removeFirst().run() ;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值