我想獲得一些Java線程的經驗和與共享對象的同步並執行簡單的鎖定。 我想要做的是創建Java應用程序插入時間戳(或分鐘)到2個不同線程的文本文件:一個線程將只插入奇數時間戳(或分鐘)文件,另一個線程將只插入甚至時間戳相同的文件。當一個線程正在插入時,另一個線程無法插入並等待通知。該文件內容必須經過的過程接近(按Ctrl + C控制檯)是這樣的:Java線程寫入文件
2013-05-10 21:37:02 2013-05-10 21:37:03 2013-05-10 21:37:04 2013-05-10 21:37:05
或
2013-05-10 21:37 2013-05-10 21:38 2013-05-10 21:39 2013-05-10 21:40
首先我想只創建一個線程,這將在文件中插入線,只是無法弄清楚什麼是錯的。這裏是我的代碼:
import java.io.*;
public class MyFileWriter
{
private FileWriter fwriter;
private BufferedWriter bufwriter;
public FileWriter getWriter()
{
return this.fwriter;
}
public void setWriter(FileWriter pfwriter)
{
this.fwriter = pfwriter;
}
public BufferedWriter getBufWriter()
{
return this.bufwriter;
}
public void setBufWriter(BufferedWriter pbfwriter)
{
this.bufwriter = pbfwriter;
}
public static void main(String[] args)
{
MyFileWriter myfile = new MyFileWriter();
try
{
FileWriter fstream = new FileWriter("output.txt");
myfile.setWriter(fstream);
BufferedWriter out = new BufferedWriter(fstream);
myfile.setBufWriter(out);
}
catch (IOException e)
{
System.out.println("Error : "+e.getMessage());
}
MyThread mt = new MyThread();
mt.setBufWriter(myfile.getBufWriter());
mt.start();
}
}
class MyThread extends Thread
{
private BufferedWriter bout;
private int count = 1;
public BufferedWriter getBufWriter()
{
return this.bout;
}
public void setBufWriter(BufferedWriter pbout)
{
this.bout = pbout;
}
public void run()
{
try
{
this.sleep(1000);
}
catch(InterruptedException e)
{
System.out.println("Error : "+e.getMessage());
}
try
{
this.bout.write("String # "+count);
this.bout.newLine();
}
catch(IOException e)
{
System.out.println("Error : "+e.getMessage());
}
this.count++;
}
}
我希望創建並啓動,該線程將插入到文件「output.txt的」串後MyThread的MT和我在命令提示符下執行Ctrl + C鍵後,我會有這樣的事情:
String #1 String #2 String #3
,但應用程序完成某種原因本身,我得到空文件只(有時文件有「字符串#1」,當我啓動應用程序,但主要是 - 空)。 任何人都可以啓發我我做錯了什麼?
操作系統:Windows XP SP3,Java版本:
Java版本 「1.7.0_21」 的Java(TM)SE運行時環境(建立1.7.0_21-B11) 的HotSpot的Java(TM)客戶端虛擬機(建設23.21-b01,混合模式,共享)
如果打算再次寫入同一個文件,則不是清零而是關閉。但另一方面,長時間保持文件打開會阻止f.ex。外部日誌旋轉程序正常工作。 – 2013-05-12 19:30:11