如何实现独家写作,但非独家阅读?

时间:2013-03-31 11:22:28

标签: java multithreading

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

1 个答案:

答案 0 :(得分: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关键字且仅在满足两个条件的情况下才能信任:

  

您可以在a下使用volatile变量而不是lock   有限的情况。必须符合以下两个标准   满足volatile变量以提供所需的线程安全性:

     

_写入变量不依赖于其当前值。

     

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