자, 알겠지만 동기화를 위해 사용하는 final static
개체를 만드는 것이 가장 좋습니다.동기화 된 비 최종 목록
그러나 객체 참조가 변경되지 않으면 동시성 문제가 발생하지 않습니다.
다음 코드가 동시성을 위반합니까?
class Foo {
private static ArrayList<Client> clients = null;
public Foo() {
clients = new ArrayList<>();
//add stuff to list here..
}
public void addClient(Client C) {
synchronized(clients) {
clients.add(C);
}
}
}
내가 고객이 최종하거나 클라이언트
ArrayList
이 (게터를 통해보다 단지 다른)에 직접 노출되지 않을 경우 최종 객체를 생성해야합니까? 즉, 참조가 변경되지 않도록 클라이언트 배열에 대한 set 메소드를 제공하지 않습니다.
참조가 변경되지 않으면 왜 마지막으로 만들지 않습니까? –
여기에 문제가 표시되지 않지만 어쨌든 문제를 해결하지 않는 이유는 무엇입니까? – Nick
C++에서 final = const로 생각 했으므로 그렇게했다면 아무 것도 추가 할 수 없습니다. 그러나 그것을 검색 한 후, 나는 그것의 동일하지 않습니다. – Brandon