以下の2つのサンプルクラスでは、どのような機能的な違いがあるのだろうかと思います。どのスタイルを別のスタイルより優先すべきか、そしてその理由。スレッドセーフなクラスを定義する2つの方法の違い
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();
}
}
OR
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'の周りにラッパーを追加する点を除いてほとんど違いはありません。したがって、すべての呼び出しは委譲する必要があります。 2番目のバージョンには、メソッド委任の余分なレイヤーがありません。 – Andreas