Skip to content

Commit d9798be

Browse files
committed
feat: add CopyOnWriteArraySet vs ConcurrentSkipListSet demo
What - New demo `CopyOnWriteArraySetDemo` comparing two thread-safe `Set` implementations: - `CopyOnWriteArraySet` (backed by `CopyOnWriteArrayList`). - `ConcurrentSkipListSet` (concurrent, sorted set based on skip list). Why - Illustrates differences in iteration and modification behavior under concurrent-like patterns. - Demonstrates how copy-on-write iterators remain unaffected by modifications, while skip-list iterators reflect changes. How - Created both sets and added integers 1–5. - Iterated `CopyOnWriteArraySet` while adding element `6` → safe, but iterator does not see the modification until future iterations. - Iterated `ConcurrentSkipListSet` while adding element `6` → safe, iterator reflects concurrent modifications and includes new element in iteration. - Printed initial contents and iteration results. Logic - `CopyOnWriteArraySet`: - Snapshot semantics for iterators → modifications create new underlying array copies, no `ConcurrentModificationException`. - No duplicates allowed. - `ConcurrentSkipListSet`: - Lock-free, concurrent skip list implementation. - Iterators are weakly consistent → may reflect modifications made during traversal. Applications - Use `CopyOnWriteArraySet` for small, mostly-read sets where iteration speed and consistency matter more than mutation performance. - Use `ConcurrentSkipListSet` for sorted sets under heavy concurrent updates where you want modifications visible during traversal. Signed-off-by: https://github.com/Someshdiwan <[email protected]>
1 parent d04cccc commit d9798be

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
package ListDemo.CopyOnWriteArrayListDemo;
2-
31
import java.util.concurrent.ConcurrentSkipListSet;
42
import java.util.concurrent.CopyOnWriteArraySet;
53

64
public class CopyOnWriteArraySetDemo {
75
public static void main(String[] args) {
8-
// Thread-Safe
9-
// Copy-On-Write Mechanism
10-
// No Duplicate Elements
11-
// Iterators Do Not Reflect Modifications
6+
// Thread-Safe, Copy-On-Write Mechanism, No Duplicate Elements, Iterators Do Not Reflect Modifications
127

138
CopyOnWriteArraySet<Integer> copyOnWriteSet = new CopyOnWriteArraySet<>();
9+
1410
ConcurrentSkipListSet<Integer> concurrentSkipListSet = new ConcurrentSkipListSet<>();
1511

1612
for (int i = 1; i <= 5; i++) {
@@ -19,22 +15,30 @@ public static void main(String[] args) {
1915
}
2016

2117
System.out.println("Initial CopyOnWriteArraySet: " + copyOnWriteSet);
18+
2219
System.out.println("Initial ConcurrentSkipListSet: " + concurrentSkipListSet);
2320

2421
System.out.println("\nIterating and modifying CopyOnWriteArraySet:");
25-
for (Integer num : copyOnWriteSet) {
22+
23+
for (Integer num : copyOnWriteSet)
24+
{
2625
System.out.println("Reading from CopyOnWriteArraySet: " + num);
26+
2727
// Attempting to modify the set during iteration
2828
copyOnWriteSet.add(6);
2929
}
30-
/*System.out.println(copyOnWriteSet);*/
30+
/* System.out.println(copyOnWriteSet); */
31+
3132

3233
System.out.println("\nIterating and modifying ConcurrentSkipListSet:");
33-
for (Integer num : concurrentSkipListSet) {
34+
35+
for (Integer num : concurrentSkipListSet)
36+
{
3437
System.out.println("Reading from ConcurrentSkipListSet: " + num);
38+
3539
// Attempting to modify the set during iteration
36-
/* if (num == 5)*/
40+
/* if (num == 5)*/
3741
concurrentSkipListSet.add(6);
38-
}
3942
}
4043
}
44+
}

0 commit comments

Comments
 (0)