【发布时间】:2019-04-24 19:05:01
【问题描述】:
我有一个类(外部类),具有以下内容
一个包含数据的列表字段
List 字段的 getter 方法
从在线数据库返回列表的 getDataFromDB 方法
实现 Runnable 并在其 run 方法中修改 List 字段的内部类
在外部类的initialize方法中,会设置一个SingleThreadScheduledExecutor,调度内部类运行
我想知道是否有必要在哪里放置一个同步块
在 getter 方法中读取 List 字段 (2)
List 字段在内部类的 run 方法中被修改(这是一个 Runnable,将由 SingleThreadScheduledExecutor 调度)(4)
public class OutterClass{
private List<Data> data;
private ScheduledExecutorService scheduledExecutorService;
@PostConstruct
private void initialize(){
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleWithFixedDelay(new InnerClass(), // other configs);
}
private List<Data> getDataFromOnlineDB() {/* some work */}
public synchronized List<Data> getData() { return data; }
private class InnerClass implements Runnable {
@Override
public void run() {
synchronized (OutterClass.this) {
data = getDataFromOnlineDB();
}
}
}
}
【问题讨论】:
标签: java concurrency synchronization