From a7a720bc007b8c2fcf44b799a9b33e9d28ddf0d1 Mon Sep 17 00:00:00 2001 From: Jason Lu Date: Thu, 27 Feb 2025 17:09:25 +0800 Subject: [PATCH] update demo for ABA problem --- .../java/threaddemo/dataracing/CASByAtomicInteger.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/threaddemo/dataracing/CASByAtomicInteger.java b/src/main/java/threaddemo/dataracing/CASByAtomicInteger.java index 7dd4071..9085445 100644 --- a/src/main/java/threaddemo/dataracing/CASByAtomicInteger.java +++ b/src/main/java/threaddemo/dataracing/CASByAtomicInteger.java @@ -41,6 +41,11 @@ public class CASByAtomicInteger { Thread t1 = new Thread(() -> { int initValue = unSafeCounter.get(); System.out.println(STR."Thread 1: Initial value = \{initValue}"); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } unSafeCounter.compareAndSet(0,20); unSafeCounter.compareAndSet(20,0); @@ -51,13 +56,13 @@ public class CASByAtomicInteger { Thread t2 = new Thread(() -> { int value = unSafeCounter.get(); + System.out.println("Thread 2: Initial value = " + value); try { // 等待线程1完成 ABA 操作 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } - System.out.println("Thread 2: Initial value = " + value); // 尝试 CAS 操作 boolean success = unSafeCounter.compareAndSet(0, 30); // A -> C