2013-03-31 93 views
5

我如何才能实现独家写作,但非独家阅读?我可以synchronize访问setter并生成一个变量volatile?这够了吗?如何实现独家写作,但非独家阅读?

+1

什么样的变量是?有些类型具有保证的原子写入。 –

+1

你能展示一个需要它的代码吗?在某些情况下,您可以简单地标记变量volatile。 – assylias

回答

6

看那Java5的并发API:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReadWriteLock.html

这将实现您的要求,因为你可以允许多个线程读取无锁,只有书写时锁定。

这里一个有趣的帖子比较该API与传统阅读时同步:ReentrantReadWriteLock vs synchronized

此外,由于@assylias在评论说,你应该避免锁定时,它是不是真的有必要。

事实上,你只能和只信任volatile关键字,如果两个条件都满足:

只能下 组受限的情况下使用volatile变量而不是锁。为了提供期望的线程安全性,以下两个条件都必须满足volatile变量:

_写入变量不取决于其当前值。

_ 变量不参与其他变量的不变量。

+1

根据使用情况,可能没有必要使用锁定并且volatile可能就足够了。 – assylias