我有一个对象 obj,它被许多线程频繁读取,但仅由一个线程定期更新。更新发生在很长一段时间后(比如 10 分钟)。
数据不那么跨国。意味着如果读取线程在一段时间内获得陈旧数据(旧),那么它完全可以。
现在我想到了使用以下方法进行同步:
final Object lock = new Object();
private MyObject obj = new MyObject(); //this is the data
public String getDataFieldName(){
synchronized(lock){
return this.obj.name;
}
}
/*the following code is wrong right?As its just synchronizes the code for getting reference.But after getting reference read thread R1 may try to get data while write Thread is modifying data.Will that give exception?How to solve this? */
public String getData(){
synchronized(lock){
return this.obj;
}
}
//only one thread can update.But how multipe threads can read at once?
public updateData(args ) {
synchronized(lock){
//do update
}
}
我的问题如下:
我不希望只有一个线程来读取数据。读取应该是并行的。
我如何同步读取和写入?如果写入线程正在更新并且读取线程正在读取我不会得到一些异常。如果读取得到一些旧数据也没关系 3)如果读取线程正在读取而写入线程正在更新,我会得到异常?会不会有什么问题?