gpt4 book ai didi

java - 如何允许并发读取,但在 Java 对象写入期间阻止所有访问?

转载 作者:行者123 更新时间:2023-12-03 07:38:53 25 4
gpt4 key购买 nike

如果我在多线程应用程序中有一个数据结构,我希望在未更改的情况下与读取同时访问该数据结构,但在写入时不允许对其他线程进行读取和写入访问?

为了简单起见,假设我有一个数组和两个方法 read()write():

int[] rgData;

// ...

int read(int ix) {
return rgData[ix];
}

void write(int ix, int val) {
rgData[ix] = val;
}

实际上,数据结构和两种访问方法更为复杂。现在,如果我使用 Java 的对象监视器并像这样包装对 read()write() 的调用

synchronized (rgData) {
int val = read(ix);
}

我不再有同时读取的情况,这很遗憾,因为同时读取没有问题,而写入很少。

一种解决方案可能是通过维护队列和线程池的通用管理器来完成所有读写作业。读作业是并发运行的,如果写作业进来,它会等待所有正在运行的作业完成,并且在写作业运行时不会处理队列。但还有更简单的吗?

最佳答案

您想要使用ReadWriteLock ,在 Java 1.5 中引入,它正好处理这种情况。

关于java - 如何允许并发读取,但在 Java 对象写入期间阻止所有访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com