【发布时间】:2014-08-08 16:32:18
【问题描述】:
我不仅对锁和同步块有基本的了解。但是,据我所知,它们只是确保单个线程一次可以访问某些数据。
我需要的有点不同。可以说我有一个字符串。我更改了一个且只有一个线程(为其分配一些值),并假设此操作需要很长时间 - 3 秒。
很多其他线程需要读取这个String的值,并假设在整个块执行之前值保持不变,并执行一些操作(执行一段代码)。让我们假设这个块需要 5 秒来执行。
因此,当有线程使用/读取字符串时,“编写器”线程不得更新字符串,并且“读取器”线程必须等待(由“编写器”)完成更新,然后才能开始使用它。
如果只有 1 个“作者”和 1 个“读者”,我可以用锁解决这个问题,但是现在有 1 个“作者”和 N 个“读者”,我怎么能做到这一点。请注意,许多“读者”可能同时访问数据。
顺便说一句,提供代码有点困难,因为它有数百行,包括互联网访问,数据库访问......
我知道我可以通过改变我的实现来避免这个问题,但我有理由更喜欢这个实现——而且我不是懒得改变它。
【问题讨论】:
-
@TheLostMind 更好
标签: java multithreading