Buffer
类有方法write
和read
。缓冲区由多个线程使用。生成数据的线程使用write
方法将数据值写入缓冲区;消耗数据的线程调用read
方法从缓冲区获取下一个数据值。以下代码在仅存在单个线程时有效,但在使用多个线程时,方法read
和write
不正确。
描述需要进行的4项更改 更正两种方法的代码,解释每次更改的效果。 (你可以写出来 如果您愿意,可以使用更正后的代码,但这不是必需的。)
public class Buffer<E> {
private int maxSize ; // the maximum length of the buffer
private List<E> entries ; // the entries in the buffer
// constructor
public Buffer(int maxSize) {
entries = new ArrayList();
this.maxSize = maxSize;
}
public void write(E entry) {
entries.add(entry);
}
public E read() {
return entries.remove(0);
}
}
我的尝试
一个变化是我们需要同步以避免同时读取/写入多个线程,但我不确定我可以做出哪些其他更改
答案 0 :(得分:-1)
最好使用并发队列
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
public class Buffer {
private int maxSize; // the maximum length of the buffer
public Queue<String> entries = new ConcurrentLinkedQueue<String>();
private static Buffer instance;
// constructor
public static Buffer getInstance() {
return instance = new Buffer();
}
public void write(String entry) {
entries.add(entry);
}
public synchronized String read() {
return entries.poll();
}
}