我试图建立一个程序,该程序使用线程从BufferedReader写入数组,并使用另一个线程从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();
问题是,我有一组测试,这些测试有时会冻结,但有时会起作用。 (我没有多线程的背景,我只是从在线教程中学习如何更快地进行非并发分配。)