如何实现独占写作,而非独占阅读?我可以synchronize
访问一个设置器并创建一个变量volatile
吗?这够了吗?
问问题
317 次
1 回答
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 变量必须满足以下两个条件才能提供所需的线程安全:
_ 写入变量不依赖于它的当前值。
_ 变量不参与其他变量的不变量。
于 2013-03-31T11:28:36.087 回答