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

本文提供java多线程分别定时读写同一个文件的样例,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。

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

package test.thread;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.util.Date;

/**

* 多线程读写同一个文件的样例。

*/

public class ThreadReadWrite {

public static void main(String[] args) {

new ThreadWrite().start();

try {

Thread.sleep(2000); // 休眠,以免那面还有写好

} catch (InterruptedException e) {

e.printStackTrace();

}

new ThreadRead().start();

}

}

class ThreadWrite extends Thread {

File file = new File("test.txt");

@Override

public void run() {

try {

while (true) {

FileWriter out = new FileWriter(file, true);// 追加写入

out.write(new Date() + "/n");

out.flush();

out.close();

Thread.sleep(3000); // 我这里间隔改成3秒,方便测试

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

class ThreadRead extends Thread {

File file = new File("test.txt");

@Override

public void run() {

try {

BufferedReader reader = new BufferedReader(new FileReader(file));

while (true) {

System.out.println(reader.readLine());

Thread.sleep(3000); // 我这里间隔改成3秒,方便测试

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

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

package test.thread;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

/**

* 使用Timer定时器进行同一文件的读写。

*/

public class ThreadReadWriteTimer {

static File file = new File("test.txt");

public static void main(String[] args) {

Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

@Override

public void run() {

FileWriter out;

try {

out = new FileWriter(file, true);

// 追加写入

out.write(new Date() + "/n");

out.flush();

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}, 0, 3000);

timer.scheduleAtFixedRate(new TimerTask() {

BufferedReader reader = null;

{

try {

reader = new BufferedReader(new FileReader(file));

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void run() {

try {

System.out.println(reader.readLine());

} catch (IOException e) {

e.printStackTrace();

}

}

}, 1000, 3000);

}

}

2013年3月06日 14:24

c4b32610104e4aa0a99ec1cf83cb32ab.gif

13

0

0

8

你可能感兴趣的:(java多线程读取文件)