两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。
使用简单的Thread.sleep技术实现定时
如果真的要求严格,应该用Timer继续比较精确的控制。
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
使用简单的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;
- /**
- * 多线程读写同一个文件的样例。
- *
- * @author 赵学庆 www.java2000.net
- */
- 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定时器进行同一文件的读写。
- *
- * @author 赵学庆 www.java2000.net
- */
- 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);
- }
- }
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>