`
ysen
  • 浏览: 119929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程读写文件

    博客分类:
  • j2se
阅读更多

多进程读写文件:一个进程A写文件file,另一个进程B读文件file
Doug Lea 在他的书中提供一个示例代码
ReadWrite 为抽象类,允许并发的读操作,不允许并发的写操作,也不允许读写同时进行。
可以扩展ReadWrite为SingleFileReadWrite 实现 doRead和doWrite方法来读写文件
线程A和线程B使用同一个SingleFileReadWrite 实例

 

 

SingleFileReadWrite rw;
threadB rw.read();
threadA rw.write();

Java代码 

 

abstract class ReadWrite {   
 protected int activeReaders = 0;  // threads executing read   
 protected int activeWriters = 0;  // always zero or one   
  
 protected int waitingReaders = 0; // threads not yet in read   
 protected int waitingWriters = 0; // same for write   
  
 protected abstract void doRead(); // implement in subclasses   
 protected abstract void doWrite();   
  
 public void read() throws InterruptedException {   
  beforeRead();   
  try   { doRead(); }   
  finally { afterRead(); }   
 }   
  
 public void write() throws InterruptedException {   
  beforeWrite();   
  try     { doWrite(); }   
  finally { afterWrite(); }   
 }   
 protected boolean allowReader() {   
  return waitingWriters == 0 && activeWriters == 0;   
 }   
  
 protected boolean allowWriter() {   
  return activeReaders == 0 && activeWriters == 0;   
 }   
  
 protected synchronized void beforeRead()   
  throws InterruptedException {   
   ++waitingReaders;   
   while (!allowReader()) {   
    try { wait(); }   
    catch (InterruptedException ie) {   
      --waitingReaders; // roll back state   
      throw ie;   
    }   
  }   
  --waitingReaders;   
  ++activeReaders;   
 }   
  
 protected synchronized void afterRead()  {   
  --activeReaders;   
  notifyAll();   
 }   
  
 protected synchronized void beforeWrite()   
  throws InterruptedException {   
   ++waitingWriters;   
   while (!allowWriter()) {   
    try { wait(); }   
    catch (InterruptedException ie) {   
     --waitingWriters;   
     throw ie;   
    }   
   }   
   --waitingWriters;   
   ++activeWriters;   
 }   
  
 protected synchronized void afterWrite() {   
  --activeWriters;   
  notifyAll();   
  }   
}  

 

分享到:
评论

相关推荐

    VC++ 多线程文件读写操作实例

    简单的利用互斥变量、原子操作等技术实现多线程读写文件时的互斥,从而确保文件在操作过程中不会被破坏。例子并没有使用很多复杂的逻辑。适合刚接触多线程编程的新手学习理解多线程程序的编程思路。

    四个线程读写文件

    四个线程读写文件,两个读文件,两个写文件。利用读写锁实现同步

    多线程通信读写文件

    多线程通信读写文件代码,根据其他的代码文档修改,用于学习多线程通信。

    java多线程读写文件示例

    主要介绍了java多线程读写文件示例,需要的朋友可以参考下

    多线程读取文件

    NULL 博文链接:https://kaobian.iteye.com/blog/1126621

    多线程对文件读写操作(java)

    多线程对文件读写操作(java),提高对文件读写效率。

    delphi多线程 读写数据

    用独立的 TThread 单元 在同一个进程中 将 一份数据很多的文件 分成 两块 同事来读取。 提快速度。

    QT多线程技术读取文档内容到程序里

    Qt Creator 多线程读取文件到程序显示 利用QT Creator多任务读取一个文档到程序里 为了防止直接读取文件里的内容太大而发生卡顿,于是多线程读取将更高效的解决这个问题。 效果图如下: 其中pro文件无需改动,...

    一个多线程同步读写的小程序

    使用多线程实现同步读写的一个小程序,同时开启读线程和写线程。当写线程写入一个数字时,读线程读取该数字。

    对Python多线程读写文件加锁的实例详解

    Python的多线程在io方面比单线程还是有优势,但是在多线程开发时,少不了对文件的读写操作。在管理多个线程对同一文件的读写操作时,就少不了文件锁了。 使用fcntl 在linux下,python的标准库有现成的文件锁,来自于...

    有进度条多线程的写入文件

    vc++读取写入文件 读取写入文件 带进度条的文件读写 多线程读写文件 带进度条可停止的多线程读写文件

    File 线程读写

    NULL 博文链接:https://zw7534313.iteye.com/blog/436841

    多线程样例一 读写参数文件

    读文件费时间,所以开一个线程读文件。 抽象后的类似demo: 假定读文件需要0.6秒,图像处理(用存文件代替)需要0.5秒,各执行100次。 类和函数 读取文件函数: 一,List增加本序号(0开始)。 二,随机生成5000...

    Java实现多文件的文件的压缩和下载

    如果您想从服务器端下载多个文件,若按照传统的下载方式,这下载速度是非常慢的,我这里提供一个把所有需要下载的文件先压缩,后下载的完全解决方案。在此秀一下,工大家参考之用。

    多线程文件读写测试

    这是个关于多线程文件读写测试的源代码,来源于网路!可以作为文件读写加速的典型事例!

    用多线程实现串口读写数据以及文件的读写

    适合的读者:初学用多线程实现对串口的异步操作,对线程的理解,以及对串口的读写。还有文件的读写都有最基本的使用方式。调试时,可以用串口调试助手一起结合的去学习~

    python多线程同步之文件读写控制

    主要为大家详细介绍了python多线程同步之文件读写控制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java线程实验读写文件

    评选班级三好学生,根据三个指标:学习成绩加权...1、学生的成绩来自文本文件“实验06数据.txt”,你也可以自己编写 2、各权重值用户输入 3、编写两个线程:一个线程从文本中读取数据;另一个线程算出该条数据的score

Global site tag (gtag.js) - Google Analytics