У меня есть класс, который 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, потому что я хочу прочитать два файла построчно одновременно. Проблема в том, что мой код читает только одну строку из обоих файлов, а затем он приостанавливается.
I Вызов функции обратного вызова на мой, как этот
public void onDone(String path, String info)
{
reader1.next();
reader2.next();
}
Так в чем проблема ?!
Заранее спасибо
Где ваши замки? Как вы их получите? Пожалуйста, включите все ваши занятия. – ram
@ram Я редактировал свой пост. моя блокировка находится внутри класса FileReader, но функция onDone находится где-то в другом месте (в моем основном классе) – strings95
'lock.wait()' ваш текущий код находится в этой строке, и вы никогда не показываете, где вы вызываете 'next()' – nachokk