Java에서 메서드를 사용하여 Synchronized 사용에 대해 알아야 합니다. 아래 코드를 한 번 참조하십시오.
코드 :
public void upDateAllUsersStatus(UserDetails userDetails)
{
for(Player p : userDetails.getPlayersList())
{
if(p != null)
{
String userId = p.getUserId();
upDateUserStatus(userId );
}
}
}
public synchronized void upDateUserStatus(String name)
{
//here update status of user in db.
}
synchronized
method.에 사용 된 위의 코드는 upDateUserStatus () 위에서 동기화를 사용하여 java.util.ConcurrentModificationException 을 얻을 가능성이 있습니까?
위의 방법에서 동기화를 사용하는 용도를 제안 해 주시겠습니까?.
미리 감사드립니다.
경우 upDateUserStatus
수정의 저장 플레이어의 목록 userDetails
객체에있는 루프의 다음 반복 upDateAllUsersStatus
을 던질 수 ConcurrentModificationException
플레이어 목록 (에 의해 수정 되었기 때문에 upDateUserStatus
그것의 존재가 (에 의해 반복하면서) upDateAllUsersStatus
). synchronized
키워드는 도움이되지 않습니다 : 다른 스레드의 동시 실행을 방지하지만, 같은 스레드가를 반복하는 동안 목록을 수정에서 개별 스레드를 방지하지 않습니다.
코드는하지만, 이상한보고, 나는 그것이 다른 문제가 의심 : 당신이 저장 플레이어의 목록을 반복하고 userDetails
있지만, 실제로는하지 않습니다 할 개별 아무것도 Player
개체를. upDateUserStatus
동일한 userDetails
객체 에 대해 여러 번 호출하기 만하면 됩니다. 당신이 의도 했 upDateUserStatus
테이크하는 Player
대신의 인수를 UserDetails
? 그렇다면 개인 Player
(아마도)이 다른 플레이어 목록을 수정할 수 없기 때문에 안전해야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다