여러 스레드가 액세스하는 ArrayList가 있습니다. 주 스레드는 목록을 지우고 다른 스레드는 목록에 추가합니다. 다른 스레드가 항목을 추가하는 동안 목록이 지워지는 것을 원하지 않습니다. 스레드가 항목을 추가하는 동안 목록이 잠겨 있기를 원합니다. Java 목록 동기화
이
은 추가 스레드의 코드입니다 :synchronized (items)
{
int length = jsonArray.length();
if ((length > 0)) for (int i = 0; i < length; i++)
{
items.add(new Item(jsonArray.getJSONObject(i)));
}
}
하지만 삭제에 대한 동기화 블록을 사용하지 마십시오. 동기화 된 블록이 클리어 할 때도 필요합니까?
그래서, 동기화 된 블록은 목록을 완전히 잠그지 않습니다.이 경우 다른 추가 스레드에서만 잠급니다. – Ali
주 스레드가 클리어 연산을 수행하는 동안 일부 스레드가 추가되기 시작하면 어떻습니까? –
'synchronized (items)'는'items.add (t)'의 여러 동시 호출을 차단합니다. '동기화 '부족으로 인한'루틴 '루틴은 잠금을 모르거나 상관하지 않습니다. –