import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
/*
* 异步写文件
*/
public class UnsynchronizedWriterDemo {
public static void main(String[] args) {
// 缓冲区FIFO
final Queue<String> buf = new LinkedList<String>();
// 写入文件线程
final Thread t1 = new Thread() {
public void run() {
PrintWriter out = null;
try {
out = new PrintWriter(new OutputStreamWriter(
new FileOutputStream("c:/console.txt")),true);
} catch (IOException e) {
e.printStackTrace();
return;// 如果发生异常则退出程序
}
while (true) {
while (buf.isEmpty()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// e.printStackTrace();
System.out.println("t1 catch the interrupt here...");
}
}
String s = buf.poll();
out.println(s);
// out.flush();// 因为创建时没有指定自动刷新行输出。
}
}
};
t1.setDaemon(true);
t1.start();
final Thread t2 = new Thread() {
public void run() {
// 从控制台读取使用System.in这个输入流,类型为InputStream,使用Scanner 或 BufferReader类封装该流均可,
// 两个类都可以读取一行字符串,方法分别是nextLine(),readLine(),使用BufferedReader 会抛出异常。
// Scanner使用平台的默认编码方式将字节转换成字符。而BufferedReader封装InputStreamReader时,该Reader可以指定编码方式的。
// BufferedReader in = new BufferedReader(new InputStreamReader(
// System.in));
Scanner in = new Scanner(System.in);
// try {
while (true) {
// String str = in.readLine();
String str = in.nextLine();
if (str.equals("quit")) {
t1.interrupt();
System.out.println("t2 invoke t1.interrupte()...");
break;
}
buf.offer(str);
}
// } catch (IOException e) {
// e.printStackTrace();
// }
}
};
t2.start();
}
}