프로그래밍(Web)/업무관련

[바미] Java ConcurrentModificationException 에러

Bami 2022. 11. 18. 18:34
728x90
반응형

제가 Java에서 JsonArray를 사용하여 한 줄씩 가져오는 데이터를 하나로 묶기위해  dataAll()함수를 사용하다 위의 에러를 경험하게 되었습니다.

	JsonArray jsonArray = Utilfunc.getJsonString(onlineData, "data"); 
	JsonArray data = new JsonArray();
		
		for (JsonElement je : msg.getAsJsonObject().get("data").getAsJsonArray()) {
			JsonObject jo = new JsonObject();
			
			jo.addProperty("symbol", je.getAsJsonObject().get("symbol").getAsString());
			jo.addProperty("close_price", je.getAsJsonObject().get("price").getAsBigDecimal());
			jo.addProperty("unix_time", je.getAsJsonObject().get("unix_time").getAsLong());
			data.add(jo);				
		}

		ja.addAll(data);

위와 같은 반복문을 돌리는 중, 처음 한 번은 잘 돌다가 두 번재 부터 ConcurrentModificationException에러가 뜨기 시작했습니다.

 

해당 에러가 뜨는 이유가 몇 가지 있는데

  • addAll()하는 변수의 속성이 다른 경우.
  • addAll()하는 변수의 데이터 포맷이 다른경우.
  • List 데이터 삭제 시 List의 크기와 처리해야할 항목을 가리키는 인덱스가 불일치 하는 경우.

였습니다.

 

저는 데이터를 추가하는 3번째 항목은 아니였기 때문에 첫 번째나 두 번째 항목에 속했는데 .getClass()를 사용하여 서로 속성이

다른 것을 넣고 있는지 확인해보니 같은 것을 넣고 있어 데이터를 확인해보니

data:[{a:a, b:b, c:c, d:d}, {a:a, b:b, c:c}]

형태로 들어가더군요. 그렇습니다 첫번째 데이터와 포맷이 맞지 않았던 것이죠.

그래서 클래스에 JsonObject 하나 추가해서 데이터를 쌓아주었습니다.

 

public class NewMarketInfo {
	static JsonArray stackData = new JsonArray();
    ...
    public static void insertData(arg a, arg b,) throws Exception {	
		JsonArray ja = new JsonArray();
		JsonArray data = new JsonArray();

		for (JsonElement je : ja) {
			JsonObject jo = new JsonObject();
			jo.addProperty("symbol", je.getAsJsonObject().get("symbol").getAsString());
			jo.addProperty("unix_time", je.getAsJsonObject().get("unix_time").getAsLong());
			jo.addProperty("close_price", je.getAsJsonObject().get("price").getAsBigDecimal());
			data.add(jo);				
		}

		maps.addAll(data);
	}
}
728x90
반응형