作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个共享资源 - 一个简单的 POJO 包装一个 HashMap - 它将在启动时初始化一次,然后只能由许多线程读取,可能同时读取(上下文是一个 Web 应用程序)。我是否需要同步对对象的访问(或者使用并发散列)或者同时进行多个读取是安全的?同步会增加大量开销吗?
最佳答案
如果您确保所有写入发生在所有读取之前,您可以跳过对该映射的读取访问的同步。 JLS 7 chapter 17.4.5 中描述了它的含义。 .
在实践中,您必须确保在任何其他将访问它的线程启动之前填充 HashMap
,并且其内容在此之后不会被修改。
此解决方案可行的原因是 Thread.start()
调用强制执行同步,因此保证在该调用之前所做的所有更改在该调用之后对旧线程和新线程都可见.如果您在该调用之后修改对象,则此保证将丢失,并且需要同步访问。
关于java - 线程安全——读取可变对象(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21825843/
我是一名优秀的程序员,十分优秀!