`
ysen
  • 浏览: 122986 次
  • 性别: 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多线程读写文件示例 Java多线程读写文件示例是指在Java编程语言中使用多线程技术来实现文件的读写操作。该示例主要介绍了如何使用Java多线程技术来实现文件的读写操作,包括文件的写入、读取和同步控制等。 ...

    四个线程读写文件

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

    多线程通信读写文件

    特别是在处理大量数据时,如读写文件,多线程可以同时执行不同的任务,从而显著提高整体性能。本项目着重探讨如何在多线程环境中实现安全有效的文件读写操作。 首先,我们需要理解多线程的基本概念。在单核处理器...

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

    然后,在`file_lock.py`的2.1部分,展示了没有使用任何同步机制(即不加锁)的多线程读写文件。这会导致并发问题,如输出所示,数据被错误地读取和写入,因为多个线程可能同时访问文件,导致数据混乱。 为了修复这...

    多线程读取文件

    在IT领域,多线程是并发处理任务的关键技术,尤其在读取大文件时,能够显著提高程序的执行效率。本文将围绕“多线程读取文件”这一主题,结合给定的标签“源码”和“工具”,深入探讨如何在Java等编程语言中实现这一...

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

    在Java编程中,多线程技术是提升程序执行效率的关键之一,特别是在进行文件读写操作时。本主题将深入探讨如何使用多线程来优化文件的读取和写入过程,以及需要注意的相关问题。 首先,我们需要理解单线程与多线程在...

    File 线程读写

    在读写文件时,可以使用文件锁来防止多个线程同时写入。 4. **缓冲区(Buffer)与非阻塞IO**: - 使用缓冲区可以提高文件读写的效率,减少系统调用的次数。Java NIO(New IO)提供了缓冲区API,可以配合通道进行非...

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

    特别是在处理I/O密集型任务(如读写文件)时,多线程可以显著提升性能。在这个“一个多线程同步读写的小程序”中,我们看到开发者尝试通过创建读线程和写线程来同时进行数据的读取和写入,以优化程序的执行流程。 ...

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

    以下是对Python多线程读写文件加锁的详细解释。 首先,我们来看如何使用`fcntl`模块实现文件锁。`fcntl`模块提供了Unix系统中的`fcntl()`和`ioctl()`接口,其中`fcntl.flock()`函数是实现文件锁的关键。这个函数...

    Qt多线程读写大型文本文件项目

    3.读取的文件使用多线程处理,不影响显示界面正常操作; 4.读取过来的文件如有修改,需要保存修改部分; 5.读、写文件需要显示处理进度; 6.增加一个列表,用于展示文本文件的类型、大小、行数等。 一、功能列表 1....

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

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

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

    带进度条可停止的多线程读写文件意味着我们需要一种机制来控制线程的执行和停止。在VC++中,可以通过设置线程的共享变量(如布尔标志)来实现这一目标。当用户请求停止时,主线程会修改这个标志,被创建的线程在检查...

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

    为了在多线程环境下安全地读写文件,我们需要考虑线程同步问题。可以通过使用CSingleLock或CCriticalSection等同步对象来确保在任何时候只有一个线程能访问文件,防止数据冲突。 此外,调试时,可以借助串口调试...

    多线程文件读写测试

    在多线程编程中,通过并发读写文件,可以显著提高整体的处理速度,特别是在现代多核处理器上。然而,这也带来了同步和竞态条件的问题,需要精心设计以确保正确性和性能。 描述中提到的“源代码来源于网络”,意味着...

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

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

    易语言多线程读取大文本文件

    易语言提供了“加锁”和“解锁”命令来实现线程间的互斥访问,确保同一时刻只有一个线程能进行读写操作。 此外,还要注意资源的释放,包括文件句柄和线程句柄。读取完成后,必须确保正确关闭文件和结束线程,防止...

    delphi多线程 读写数据

    以下是使用TThread进行多线程读写的步骤: 1. **创建TThread子类**:首先,创建一个新的类,继承自TThread。在这个新类中,定义你需要在线程中执行的代码,即读取或写入数据的逻辑。 ```delphi type ...

    file_dw.rar_多线程 读写_文件 系统 dw

    "file_dw.rar_多线程 读写_文件 系统 dw"这个压缩包文件,从标题来看,似乎包含了一个关于如何在操作系统(可能是DW,可能是某个特定的操作系统代号或者开发环境)中使用多线程进行文件读写的示例或代码库。...

Global site tag (gtag.js) - Google Analytics