我有一个数据 var,monthArray
由多个消费者读取,并由单个定期更新程序线程定期更新。都是异步的。
我已经考虑了这两个选项来安全地执行更新。
ArrayList<String> tempArray = ModelJob.getDistinctMonths(user, true);
synchronized (monthArray) {
monthArray = tempArray;
}
或者
synchronized (monthArray) {
monthArray = ModelJob.getDistinctMonths(user, true);
}
第一个背后的想法是ModelJob.getDistinctMonths(user, true);
调用很耗时,我不想让同步阻塞更长的时间,只是为了用更新的数组快速重新分配旧数组。然而似乎是一个混淆,我只想在完全必要的情况下这样做。谁能给我任何关于jvm如何处理这种同步和天气的见解,或者不做前者会让我的性能有所提高吗?基本上我问jvm是否会阻塞整个静态ModelJob调用,或者它是否能够只阻塞重新分配并且安全,如果是这样,这样做是否足够聪明。