아래의 두 예제 클래스에는 기능상의 차이점이 무엇인지 궁금합니다. 어떤 스타일을 다른 스타일보다 선호해야하는지, 왜 선호해야하는지.스레드 안전 클래스를 정의하는 두 가지 방법의 차이점
public class MyQueue {
private Queue<Abc> q;
public MyQueue() {
q = Collections.synchronizedList(new LinkedList<Abc>());
}
public void put(Abc obj) {
q.add(obj);
}
public Abc get() {
return q.remove();
}
}
또는
public class MyQueue {
private Queue<Abc> q;
public MyQueue() {
q = new LinkedList<Abc>();
}
public synchronized void put(Abc obj) {
q.add(obj);
}
public synchronized Abc get() {
return q.remove();
}
}
필자는 - 모두가 수업 시간에이 정도 기능, 개인적인 취향의 문제로까지 완벽하게 정상적으로 작동합니다.
더 많은 차이가 있는지 알려주세요.
단순화 된 경우'synchronizedList()'가'LinkedList' 주위에 래퍼를 추가한다는 것을 제외하고는 약간의 차이가 있습니다. 그래서 모든 호출은 위임되어야합니다. 두 번째 버전에는 메소드 위임의 추가 레이어가 없습니다. – Andreas