WriteTest.javaimport java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;public class WriteTest {
Object obj = new Object();
List<String> lines = new ArrayList<>();
private boolean over = false;
private int sleepTime = 10000; public void setSleepTime(int n) {
this.sleepTime = n;
} public static void main(String[] args) throws IOException {
WriteTest w = new WriteTest();
w.go();
} public void setOver(boolean over) {
this.over = over;
} public boolean isOver() {
return over && (lines.size() == 0);
} public void go() throws IOException {
WriteThread wt = new WriteThread();
wt.start();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = null;
System.out.println("input: "); while ((line = br.readLine()) != null) { if ("exit".equalsIgnoreCase(line)) {
break;
}
synchronized (obj) {
lines.add(line);
System.out.println("input(" + lines.size() + "): "); } }
br.close();
setOver(true);
setSleepTime(1); } class WriteThread extends Thread { @Override
public void run() {
synchronized (obj) {
try {
PrintWriter pw = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(new File("e:/test.txt"))));
int i;
while (!isOver()) {
synchronized (pw) {
for (i = 0; i < lines.size(); i++) {
pw.println(lines.get(i));
}
pw.flush();
System.out.println("writed...");
lines.clear();
} Thread.sleep(sleepTime);
} } catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
}}为什么我加了synchronized代码快后,运行到go()方法里的synchronized(obj)之前就运行不下去了(不能持续地输入)?但是writeThread线程却还在运行?