第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從屬性文件讀取時(shí)出現(xiàn) java.util.ConcurrentModifi

從屬性文件讀取時(shí)出現(xiàn) java.util.ConcurrentModifi

手掌心 2021-12-01 19:58:08
我在讀取 JVM 配置屬性時(shí)遇到了問(wèn)題,System.getProperties()因?yàn)樵谀承┉h(huán)境中我java.util.ConcurrentModificationException在 JVM 重新啟動(dòng)后遇到了問(wèn)題。[err] java.util.ConcurrentModificationException [err] at java.util.Hashtable$Enumerator.next(Hashtable.java:1502)為了避免前面提到的錯(cuò)誤,我必須多次重新啟動(dòng) VM。到目前為止我做了什么:同步屬性鍵和值被讀取和寫入日志文件的方法;因?yàn)?Java 的 Properties 對(duì)象是一個(gè) HashMap,所以我嘗試使用同步 Map;我試圖通過(guò)使用更多共享相同 Properties 對(duì)象的線程來(lái)模擬并發(fā)問(wèn)題,但是我無(wú)法在本地環(huán)境中重現(xiàn)該錯(cuò)誤;由于線程安全,我正在使用 StringBuffer;private static final Logger LOG = LoggerFactory.getLogger(PropertyLogger.class);public static synchronized final void logProperties() {        Level oldLevel = LOG.getLevel();        LOG.setLevel(Level.INFO);        Properties props = System.getProperties();        Map<Object, Object> shared = Collections.synchronizedMap(new HashMap<>());        shared.putAll(props);        for (final Entry<Object, Object> entry : shared.entrySet()) {          try{  StringBuffer buffer = new StringBuffer();            buffer.append(entry.getKey());            buffer.append(" = "); //$NON-NLS-1$            buffer.append(entry.getValue());            LOG.info(buffer.toString());          }          catch (Exception ex){              ex.printStackTrace();          }        }        LOG.setLevel(oldLevel);    }我可能是我正在處理的問(wèn)題也由用于編寫的 log4j 庫(kù)觸發(fā),我知道這不是線程安全的。我添加了堆棧跟蹤:[err] java.util.ConcurrentModificationException [err] at java.util.Hashtable$Enumerator.next(Hashtable.java:1502) [err] at com.myapp.common.PropertyLogger.logProperties(PropertyLogger.java:23) [err] ] 在 com.myapp.input.ConfigurationServer.parse(ConfigurationServer.java:710) [err] 在 com.myapp.input.ConfigurationServer.configure(ConfigurationServer.java:94) [err] 在 com.myapp.input.Application。運(yùn)行(Application.java:78)[err] 在 com.myapp.input.servlet.InputStarter$ValidatorThread.run(InputStarter.java:113)問(wèn)候,PS:我應(yīng)該添加同步塊來(lái)調(diào)用方法嗎?例如:在 parse 方法中應(yīng)該調(diào)用我的代碼synchronized(this) {     PropertyLogger.logProperties();}
查看完整描述

1 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

問(wèn)題不在于日志框架,而在于行

shared.putAll(props);

Properties類擴(kuò)展Hashtable,系統(tǒng)屬性可以隨時(shí)更改。隨著shared.putAll(props)您迭代類的對(duì)象props,Properties(Hashtable)如果在迭代過(guò)程中修改了任何值,我們將得到這個(gè)錯(cuò)誤ConcurrentModificationException

一個(gè)解決方案是在迭代之前在 System.Properties() 對(duì)象上調(diào)用 clone()


查看完整回答
反對(duì) 回復(fù) 2021-12-01
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)