Giriş
Bu sınıfı yaratmak için Collections.synchronizedList() çağrısına RandomAccess özelliğini destekleyen bir liste geçmek gerekir. Yani ArrayList.
constructor
Şöyle yaparız.
Metodun içi şöyle.
iterator metodu
Açıklaması şöyle
Şöyle yaparız.
List list = Collections.synchronizedList(new ArrayList());
contains metoduMetodun içi şöyle.
public boolean contains(Object o) {
synchronized (mutex) {return c.contains(o);}
}
forEach metodu
Kendi içinde mutex'i kilitler
Örnek
Şöyle yaparız
List<Integer> list = Collections.synchronizedList(new ArrayList<>());list.addAll(List.of(1, 2, 3, 4));// Safe - lock taken inside of forEach on SynchcronizedListlist.forEach(System.out::println);// Unsafe - lock needs to be taken in client codesynchronized (list) {list.stream().forEach(System.out::println);}// Unsafe - lock needs to be taken in client codesynchronized (list) {list.parallelStream().forEach(System.out::println);}
Açıklaması şöyle
It is imperative that the user manually synchronize on the returned list when traversing it via Iterator, Spliterator or Stream
Örnek
Şöyle yaparız.
Metodun içi şöyle.
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
remove metoduMetodun içi şöyle.
public boolean remove(Object o) {
synchronized (mutex) {return c.remove(o);}
}
Hiç yorum yok:
Yorum Gönder