在谈到Java中的并发性时,我在接受采访时被问到以下问题.我无法想出一个好的策略.有任何想法吗?
如何在不同步代码的情况下共享对java资源的访问?
如果资源是不可变的,那么不需要同步,但除此之外,这里有一些想法:
限制对只读的所有访问:如果没有更新资源,那么任何数量的并发线程都可以安全地具有对它的读访问权.
复制每个订阅者的资源:任意数量的线程都可以拥有自己的资源副本并安全地修改它,而不会影响具有自己副本的其他线程.(例如ThreadLocal)
使用原子引用来模拟同步:"getter"方法使用检查原子引用(例如AtomicBoolean)来创建"签入"/"签出"系统,以确保只有一个线程可以访问资源,不需要同步.
使用锁定java.util.concurrent.locks:可以提供相同(甚至更好)的功能,而无需使用synchronized关键字.
当然,面试官可能会施加额外的限制,但鉴于你问题中的信息很少,这些都是很好的起点.
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |