Я пытаюсь настроить программу, которая использует поток для записи в массив из BufferedReader, а другой - для чтения из него.
Однако, если результат чтения равен нулю (т. Е. Индекс чтенияперед записью индекса), я хочу, чтобы он подождал, а затем снова получил доступ к тому же индексу.
Я пытался использовать синхронизированные операторы, а также read () и notify () следующим образом.
int n = Integer.parseInt(br.readLine());
String[] lines = new String[n];
Thread t1 = new Thread(() -> {
try {
for (int i = 0; i < n; i++) {
synchronized(lines) {
lines[i] = br.readLine();
lines.notify();
}
}
} catch (IOException e) {
return;
}
});
t1.start();
Thread t2 = new Thread(() -> {
try {
int i = 0;
while (i < n) {
String get = lines[i];
if (get == null) {
synchronized (lines) {
lines.wait();
}
continue;
}
add(representString(lines[i]), hmap);
i++;
}
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
});
t2.start();
Проблема в том, что у меня есть набор тестов, которые иногда зависают, но иногда работают.(У меня нет опыта работы с многопоточностью, я просто учусь на онлайн-уроках, чтобы быстрее выполнять задания без параллелизма.)