java中的多线程同步

时间:2015-05-13 17:28:20

标签: java multithreading synchronization

Buffer类有方法writeread。缓冲区由多个线程使用。生成数据的线程使用write方法将数据值写入缓冲区;消耗数据的线程调用read方法从缓冲区获取下一个数据值。以下代码在仅存在单个线程时有效,但在使用多个线程时,方法readwrite不正确。

描述需要进行的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);
    }

}

我的尝试

一个变化是我们需要同步以避免同时读取/写入多个线程,但我不确定我可以做出哪些其他更改

1 个答案:

答案 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();
    }
}