使用多线程从正在写入的数组中安全读取

时间:2018-10-15 00:44:41

标签: java multithreading concurrency

我试图建立一个程序,该程序使用线程从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();

问题是,我有一组测试,这些测试有时会冻结,但有时会起作用。 (我没有多线程的背景,我只是从在线教程中学习如何更快地进行非并发分配。)

0 个答案:

没有答案