我有一个Java线程相关的问题。Java线程同步,最佳并发实用程序,读操作
举一个非常简单的例子,可以说我有2个线程。
线程A运行StockReader Class实例
线程B运行StockAvgDataCollector Class实例
在线程B,StockAvgDataCollector收集一些市场数据连续地,做了一些重均值/处理和更新的成员变量spAvgData
在线程中Stockreader可以使用getspAvgData()方法访问StockAvgDataCollector实例及其成员spAvgData。
因此,线程A只执行读操作,线程B执行读/写操作。
问题
现在,我需要在这种情况下同步或原子功能或锁定或并发相关的东西?线程A读取较旧的值并不重要。
因为线程A只进行读取操作而不更新任何内容,只有线程B执行任何写入操作,是否会出现死锁情况?
我从以下链接粘贴了一段。从该段看来,我确实需要担心某种锁定/同步。
http://java.sun.com/developer/technicalArticles/J2SE/concurrency/
读/写锁
当使用一个线程来读取一个对象的数据,你不一定需要防止另一个线程在同一时间读取数据。只要线程只读取数据而不改变数据,没有理由不能并行读取数据。 J2SE 5.0 java.util.concurrent.locks包提供了实现这种类型锁定的类。 ReadWriteLock接口维护一对相关的锁,一个用于只读,另一个用于写入。 readLock()可以由多个读者线程同时保存,只要没有写者。 writeLock()是独占的。理论上,很明显,使用读写器锁来增加并发性会比使用互斥锁取得更好的性能。但是,这种性能改进只能在多处理器上完全实现,并且数据读取的频率与被修改的频率以及读取和写入操作的持续时间相比较。
哪个并发工具在我的例子中会更便宜和适用?
java.util.concurrent.atomic?
java.util.concurrent.locks?
java.util.concurrent.ConcurrentLinkedQueue? - 在这种情况下,StockAvgDataCollector将被添加并且StockReader将被删除。没有getspAvgData()方法将被暴露。
感谢 阿米特
对不起,我不知道。刚刚接受了我之前的所有问题。感谢您指出。 – FatherFigure 2011-02-08 23:53:47