나는이 코드는 부두 웹 서버 내에서 실행되는 특정 접두사자바 속성 variabile : 설정 특성 동안 반복 키
private static List<String> getKeysByPrefix(String prefix) {
Set<?> keySet = System.getProperties().keySet();
Iterator<?> iterator = keySet.iterator();
List<String> list = new ArrayList<>();
while (iterator.hasNext()) {
String key = (String) iterator.next();
if (key.startsWith(prefix)) {
list.add(key);
}
}
return list;
}
로 시작하는 모든 시스템 속성 키를 수집하는 코드를 가지고 있고, 반면 요청이이 코드를 실행 중입니다. 다른 요청이 java 내부에 새로운 키를 작성하는 경우가 발생할 수 있습니다. System.setProperty("test", "foo");
이 시나리오에서는 속성을 반복하고 다른 요청이 변경되는 동안 ConcurrentModificationException
이 표시됩니다. 그것.
java.util.ConcurrentModificationException
at java.util.Hashtable$Enumerator.next(Hashtable.java:1378)
새로운 속성이 키를 반복하는 일에 비해 완전히 다른 흐름이지만, SystemProperties는 모든 JVM 인스턴스 공유하고 있기 때문에, 나는이 오류를 받고 있어요 설정 코드입니다.
이 주제를 다루는 다른 주제를 이미 발견했으며 가장 권장되는 솔루션은 ConcurrentHashMap을 사용하고 있습니다. 이 옵션은 SystemProperties 맵을 생성하는 것이 아니기 때문에 읽을 수는 없기 때문에 나에게 유용하지 않습니다. 당신은 단순히 바로이 문제를 해결하기 위해 제안 된 연습을 여기 반복자 루프
의 폐쇄 브래킷 전에 setProperty
전화를 추가 할 수 있습니다 문제를 재현하기 위해
?
주어진 시간에 시스템 속성을 수정할 수있는 스레드가 하나만 있으면됩니다. – Mena
속성을 어떻게 업데이트합니까? 'System.setProperty' 사용하기? – manouti