diff --git a/src/main/java/threaddemo/lock/CLH.java b/src/main/java/threaddemo/lock/CLH.java
new file mode 100644
index 0000000..2e5166e
--- /dev/null
+++ b/src/main/java/threaddemo/lock/CLH.java
@@ -0,0 +1,30 @@
+package threaddemo.lock;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * demo class for CLH. code from
+ * Java AQS 核心数据结构-CLH 锁
+ * This is only for demo, do not run the code this node class is not workable
+ */
+public class CLH {
+ private final ThreadLocal node = ThreadLocal.withInitial(Node::new);
+ private final AtomicReference tail = new AtomicReference<>(new Node());
+
+ private static class Node {
+ private volatile boolean locked;
+ }
+
+ private void lock() {
+ Node node = this.node.get();
+ node.locked = true;
+ Node pre = this.tail.getAndSet(node);
+ while (!pre.locked) ;
+ }
+
+ private void unlock() {
+ final Node node = this.node.get();
+ node.locked = false;
+ this.node.set(new Node());
+ }
+}