多线程分别定时读写同一个文件的样例

解决进程或多线程同时读写同一个文件的问题 本文介绍一种在PHP中解决进程或多线程同时读写同一个文件的问题。 阅读详情
 两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。

使用简单的Thread.sleep技术实现定时

  1. package test.thread;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.util.Date;
  7. /**
  8.  * 多线程读写同一个文件的样例。
  9.  * 
  10.  * @author 赵学庆 www.java2000.net
  11.  */
  12. public class ThreadReadWrite {
  13.   public static void main(String[] args) {
  14.     new ThreadWrite().start();
  15.     try {
  16.       Thread.sleep(2000); // 休眠,以免那面还有写好
  17.     } catch (InterruptedException e) {
  18.       e.printStackTrace();
  19.     }
  20.     new ThreadRead().start();
  21.   }
  22. }
  23. class ThreadWrite extends Thread {
  24.   File file = new File("test.txt");
  25.   @Override
  26.   public void run() {
  27.     try {
  28.       while (true) {
  29.         FileWriter out = new FileWriter(file, true);// 追加写入
  30.         out.write(new Date() + "/n");
  31.         out.flush();
  32.         out.close();
  33.         Thread.sleep(3000); // 我这里间隔改成3秒,方便测试
  34.       }
  35.     } catch (Exception e) {
  36.       e.printStackTrace();
  37.     }
  38.   }
  39. }
  40. class ThreadRead extends Thread {
  41.   File file = new File("test.txt");
  42.   @Override
  43.   public void run() {
  44.     try {
  45.       BufferedReader reader = new BufferedReader(new FileReader(file));
  46.       while (true) {
  47.         System.out.println(reader.readLine());
  48.         Thread.sleep(3000); // 我这里间隔改成3秒,方便测试
  49.       }
  50.     } catch (Exception e) {
  51.       e.printStackTrace();
  52.     }
  53.   }
  54. }

如果真的要求严格,应该用Timer继续比较精确的控制。

  1. package test.thread;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.util.Date;
  8. import java.util.Timer;
  9. import java.util.TimerTask;
  10. /**
  11.  * 使用Timer定时器进行同一文件的读写。
  12.  * 
  13.  * @author 赵学庆 www.java2000.net
  14.  */
  15. public class ThreadReadWriteTimer {
  16.   static File file = new File("test.txt");
  17.   public static void main(String[] args) {
  18.     Timer timer = new Timer();
  19.     timer.scheduleAtFixedRate(new TimerTask() {
  20.       @Override
  21.       public void run() {
  22.         FileWriter out;
  23.         try {
  24.           out = new FileWriter(file, true);
  25.           // 追加写入
  26.           out.write(new Date() + "/n");
  27.           out.flush();
  28.           out.close();
  29.         } catch (IOException e) {
  30.           e.printStackTrace();
  31.         }
  32.       }
  33.     }, 03000);
  34.     timer.scheduleAtFixedRate(new TimerTask() {
  35.       BufferedReader reader = null;
  36.       {
  37.         try {
  38.           reader = new BufferedReader(new FileReader(file));
  39.         } catch (IOException e) {
  40.           e.printStackTrace();
  41.         }
  42.       }
  43.       @Override
  44.       public void run() {
  45.         try {
  46.           System.out.println(reader.readLine());
  47.         } catch (IOException e) {
  48.           e.printStackTrace();
  49.         }
  50.       }
  51.     }, 10003000);
  52.   }
  53. }












<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
专门处理文件的类------RandomAccessFile Java除了File类之外,还提供了专门处理文件的类,即RandomAccessFile(随机访问文件)类。该类是Java语言中功能最为丰富的文件访问类,它提供了众文件访问方法。RandomAccessFile类支持“随机访问”方式,这里“随机”是指可以跳转到文件的任意位置处读写数据。在访问一个文件的时候,不必把文件从头读到尾,而是希望像访问一个数据库一“随心所欲”地访问一个文件的某个部分,... 阅读详情

相关推荐

QT多线程Qthread读写同一个文件问题

两个线程可以同时打开一个文件,并且同时写和读都是可以的,都没有限制但是Qthread读写

AIcar_lrm的博客 2562

C#多线程读写同一文件处理

多线程访问读写同一个文件时,经常遇到异常:“文件正在由另一进程使用,因此该进程无法访问此文件”。 多线程访问统一资源的异常, 解决方案1,保证读写操作单线程执行,可以使用lock 解决方案2,使用System.Threading.ReaderWriterLockSlim ,对读写操作锁定处理 读写锁是以ReaderWriterLockSlim对象作为锁管理资源的,不同的 ReaderWriterLockSlim 对象中锁定同一个文件也会被视为不同的锁进行管理,这种差异可能会再次导致文件的并发写..

月亮哥的专栏 6868

java两个线程同时写一个文件

主要为大家详细介绍了java两个线程同时写一个文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

java中Writer的线程安全性

以前负责一个项目,我负责从一个超大的文本文件中读取信息存入数据库再进一步分析。而文本文件内容是每行一个json串。我在解析的过程中发现,有很小的概率json串的结构会破坏,比如前一个json串只写了半行,后面就被另一个json串覆盖掉了。 与产生日志的部门沟通,他们说是多线程使用log4j写入,可能偶尔会有串行。 具体他们是否使用log4j的AsyncAppender我不太了解,暂时也没去看l

watchzerg1的专栏 967

java多线程读写同一个文件的代码

本文提供java多线程分别定时读写同一个文件,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。 使用简单的Thread.sleep技术实现定时 package test.thread; import java.io.BufferedReader; import java.io.File; import java.io.FileReader;

818

java多线程读取文件_java多线程读写同一个文件

本文提供java多线程分别定时读写同一个文件,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。使用简单的Thread.sleep技术实现定时package test.thread;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io....

weixin_33347467的博客 3700

Python多线程编程,多线程定时器文件锁,文件读取权限的知识记录

Python多线程编程,多线程定时器文件锁,文件读取权限的知识记录 最近有个需求:统计交换机最近的接口收发速率和的信息,要带时间戳 Web发出HTTP请求,得到对应json信息返回过去,然后绘图 这里根据C-S客户端服务器模型,我需要在服务器端不断地更新数据,写到文件里,供客户端读文件信息 为了减少系统开销,我在REST服务器主线程端开启了一个子线程 这个子线程的功能是:轮询更新需要的信息,每分钟更新一次,把信息存到文件里 需要用Timer函数重写线程方法 class Repeat..

qq_33413832的博客 453

Qt多线程定时读取Modbus服务器 寄存器以及读写,另一个线程点击刷新系统时间

ui界面 程序结构图 global.h #ifndef GLOBAL_H #define GLOBAL_H #include &lt;QString&gt; class global { public: global(); static QString ComPortName; static QString Tor; }; #endif // GLOBAL...

DFrY的博客 8047

python多线程读取文件的问题_Python多线程同步---文件读写控制方法

1、实现文件读写文件ltz_schedule_times.py#! /usr/bin/env python#coding=utf-8import osdef ReadTimes():res = []if os.path.exists('schedule_times.txt'):fp = open('schedule_times.txt', 'r')else:os.system('touch sc...

weixin_39746282的博客 219

java文件定时读写_java定时读取文件

在项目中经常会用到定时器,在笔试或者面试中也会经常问到定时器和IO流。public classTimerDemo {public static void main(String[] args) throwsException {Calendar date=Calendar.getInstance();//设置固定开始时间为 00:00:00date.set(date.get(Calendar.YE...

weixin_42697475的博客 717

Linux多线程对同一文件读写

FREAD(3) Linux Programmer's Manual FREAD(3) NAME fread, fwrite - binary stream input/output SYNOPSIS #include <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *str.

qq1337594525的博客 2822

线程并发问题(线程安全)

day18 - 线程同步 线程并发问题(线程安全) 案场景 银行取钱问题 买票问题 限时秒杀 线程安全 多线程并发时,个线程同时操作同一个内存区域(变量),可能会导致的结果不一致的问题;所谓线程安全,指的是在多线程并发操作的时候能保证共享的变量数据一致 并发编程三要素 线程并发时需要保证线程安全,需要满足三大条件: 原子性 可见性 有序性 原子性(Atomicity) 对于一条线程执行来说要保证,要么都成功,要么都失败;对于原子性操作可以通过加锁的方式实现;Synchronized和Reentr

Superzhaoy的博客 2537

多线程向一个文件中写数据

最近被问到Log4j如何通过个线程向一个文件中写入数据,当时没有一点头绪, 因为用过windows记事本的小伙伴都知道,当一个记事本文件被同时打开次,并且每个都修改,那么只会保留第一次打开的内容,这就是互斥锁的机制吧。  具体场景:三个线程分别读取三个文件a,b,c 并向d文件中写入 现在想起来两个方案给小伙伴分享一下: 第一种(不可行)使用IO流复用,就是个线程共用一个IO流

c_wangbin的博客 2万+

多线程读写文件问题

C++多线程文件操作

fang437385323的专栏 828
上一篇: 最新蜘蛛的Agent和IP地址列表08-09-15
下一篇: URL重写的几种实现方式的总结
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值