Bob*_*r02 8 java multithreading
我最近在Java中编写了一个并发程序,并遇到了一个陷入困境的困境:假设你有一个全局数据结构,它是常规的非同步,非并发库,如HashMap的一部分.允许多个线程在不同的交错周期中迭代整个集合(只是读取,没有修改)是否可以,即当thread2在同一个地图上获取迭代器时,thread1可能会重复一半?
Ale*_*exR 12
没关系.能够做到这一点是创建迭代器这样的接口的原因.迭代集合的每个线程都有自己的迭代器实例,它保存其状态(例如,您现在处于迭代过程中的位置).
这允许多个线程同时迭代同一个集合.
只要没有作家,它应该没问题.
此问题类似于reader-writer锁,其中允许多个读取器从数据中读取,但在写入器"拥有"锁定时不会.对于同时读取的倍数,没有并发问题.[数据竞争只有在您至少有一次写入时才会发生].