我有一個的FileReader類,這是這樣的Java的等待兩個線程通知作爲同一類
public class FileReader extends Thread
{
private final Object lock = new Object();
public FileReader(String path, FileReaderCallback callback)
{
super(path);
this.path = path;
this.callback = callback;
}
@Override
public void run()
{
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
String info;
while ((info = reader.readLine()) != null)
{
synchronized (lock)
{
callback.onDone(path, info);
try
{
lock.wait();
}
catch (Exception ignored)
{
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void next()
{
synchronized (lock)
{
try
{
lock.notify();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
而且我有這個的FileReader兩個實例,因爲我想同時讀取線兩種文件一行。問題是我的代碼只從這兩個文件中讀取一行,然後它會暫停。
我所說的功能在我的回調這樣
public void onDone(String path, String info)
{
reader1.next();
reader2.next();
}
那麼,有什麼問題?
在此先感謝
你的鎖在哪裏?你如何獲得它們?請包括你所有的課程。 – ram
@ram我編輯了我的文章。我的鎖在FileReader類中,但onDone函數在其他地方(在我的主類中) – strings95
'lock.wait()'你的運行代碼在該行,並且你永遠不會顯示你在哪裏調用next()' – nachokk