多进程读写文件:一个进程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();
}
}
分享到:
相关推荐
简单的利用互斥变量、原子操作等技术实现多线程读写文件时的互斥,从而确保文件在操作过程中不会被破坏。例子并没有使用很多复杂的逻辑。适合刚接触多线程编程的新手学习理解多线程程序的编程思路。
四个线程读写文件,两个读文件,两个写文件。利用读写锁实现同步
多线程通信读写文件代码,根据其他的代码文档修改,用于学习多线程通信。
主要介绍了java多线程读写文件示例,需要的朋友可以参考下
NULL 博文链接:https://kaobian.iteye.com/blog/1126621
多线程对文件读写操作(java),提高对文件读写效率。
用独立的 TThread 单元 在同一个进程中 将 一份数据很多的文件 分成 两块 同事来读取。 提快速度。
Qt Creator 多线程读取文件到程序显示 利用QT Creator多任务读取一个文档到程序里 为了防止直接读取文件里的内容太大而发生卡顿,于是多线程读取将更高效的解决这个问题。 效果图如下: 其中pro文件无需改动,...
使用多线程实现同步读写的一个小程序,同时开启读线程和写线程。当写线程写入一个数字时,读线程读取该数字。
Python的多线程在io方面比单线程还是有优势,但是在多线程开发时,少不了对文件的读写操作。在管理多个线程对同一文件的读写操作时,就少不了文件锁了。 使用fcntl 在linux下,python的标准库有现成的文件锁,来自于...
vc++读取写入文件 读取写入文件 带进度条的文件读写 多线程读写文件 带进度条可停止的多线程读写文件
NULL 博文链接:https://zw7534313.iteye.com/blog/436841
读文件费时间,所以开一个线程读文件。 抽象后的类似demo: 假定读文件需要0.6秒,图像处理(用存文件代替)需要0.5秒,各执行100次。 类和函数 读取文件函数: 一,List增加本序号(0开始)。 二,随机生成5000...
如果您想从服务器端下载多个文件,若按照传统的下载方式,这下载速度是非常慢的,我这里提供一个把所有需要下载的文件先压缩,后下载的完全解决方案。在此秀一下,工大家参考之用。
这是个关于多线程文件读写测试的源代码,来源于网路!可以作为文件读写加速的典型事例!
适合的读者:初学用多线程实现对串口的异步操作,对线程的理解,以及对串口的读写。还有文件的读写都有最基本的使用方式。调试时,可以用串口调试助手一起结合的去学习~
主要为大家详细介绍了python多线程同步之文件读写控制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
评选班级三好学生,根据三个指标:学习成绩加权...1、学生的成绩来自文本文件“实验06数据.txt”,你也可以自己编写 2、各权重值用户输入 3、编写两个线程:一个线程从文本中读取数据;另一个线程算出该条数据的score