diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..5850ed7 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..3916816 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a59d74b --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..39ce183 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,1306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + synchronized + compare + incrementand + compareandset + all + sun.mi + onadv + set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1565232818446 + + + 1566616292953 + + + 1567908240513 + + + 1569205605236 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/src/main/java/com/mashibing/juc/c_020/T11_TestSemaphore.java + 12 + + + + jar://C:/Program Files/Java/jdk-11.0.3/lib/src.zip!/java.base/java/util/concurrent/locks/ReentrantLock.java + 126 + + + + file://$PROJECT_DIR$/src/main/java/com/mashibing/juc/c_021_02_AQS/TestReentrantLock.java + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + + + + + + + + 11 + + + + + + + + JUC + + + + + + + + Maven: com.lmax:disruptor:3.4.2 + + + + + + + + \ No newline at end of file diff --git a/JUC.iml b/JUC.iml new file mode 100644 index 0000000..74f3f13 --- /dev/null +++ b/JUC.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/main/java/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.java b/src/main/java/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.java index 9c1fdfb..dc5ff0d 100644 --- a/src/main/java/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.java +++ b/src/main/java/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.java @@ -2,6 +2,8 @@ //import sun.misc.*; +import sun.misc.Unsafe; + public class HelloUnsafe { static class M { private M() {} @@ -9,12 +11,12 @@ private M() {} int i =0; } - /* public static void main(String[] args) throws InstantiationException { + public static void main(String[] args) throws InstantiationException { Unsafe unsafe = Unsafe.getUnsafe(); M m = (M)unsafe.allocateInstance(M.class); m.i = 9; System.out.println(m.i); - }*/ + } } diff --git a/src/main/java/com/mashibing/juc/c_021_03_VarHandle/T01_HelloVarHandle.java b/src/main/java/com/mashibing/juc/c_021_03_VarHandle/T01_HelloVarHandle.java new file mode 100644 index 0000000..65afb67 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_021_03_VarHandle/T01_HelloVarHandle.java @@ -0,0 +1,37 @@ +package com.mashibing.juc.c_021_03_VarHandle; + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; + +public class T01_HelloVarHandle { + + int x = 8; + + private static VarHandle handle; + + static { + try { + handle = MethodHandles.lookup().findVarHandle(T01_HelloVarHandle.class, "x", int.class); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + T01_HelloVarHandle t = new T01_HelloVarHandle(); + + //plain read / write + System.out.println((int)handle.get(t)); + handle.set(t,9); + System.out.println(t.x); + + handle.compareAndSet(t, 9, 10); + System.out.println(t.x); + + handle.getAndAdd(t, 10); + System.out.println(t.x); + + } +} diff --git a/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/M.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/M.java new file mode 100644 index 0000000..19da6d8 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/M.java @@ -0,0 +1,8 @@ +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; + +public class M { + @Override + protected void finalize() throws Throwable { + System.out.println("finalize"); + } +} diff --git a/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T01_NormalReference.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T01_NormalReference.java new file mode 100644 index 0000000..59efbdc --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T01_NormalReference.java @@ -0,0 +1,13 @@ +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; + +import java.io.IOException; + +public class T01_NormalReference { + public static void main(String[] args) throws IOException { + M m = new M(); + m = null; + System.gc(); //DisableExplicitGC + + System.in.read(); + } +} diff --git a/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T02_SoftReference.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T02_SoftReference.java new file mode 100644 index 0000000..3b4bef9 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T02_SoftReference.java @@ -0,0 +1,31 @@ +/** + * 软引用 + * 软引用是用来描述一些还有用但并非必须的对象。 + * 对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收。 + * 如果这次回收还没有足够的内存,才会抛出内存溢出异常。 + * -Xmx20M + */ +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; + +import java.lang.ref.SoftReference; + +public class T02_SoftReference { + public static void main(String[] args) { + SoftReference m = new SoftReference<>(new byte[1024*1024*10]); + //m = null; + System.out.println(m.get()); + System.gc(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(m.get()); + + //再分配一个数组,heap将装不下,这时候系统会垃圾回收,先回收一次,如果不够,会把软引用干掉 + byte[] b = new byte[1024*1024*15]; + System.out.println(m.get()); + } +} + +//软引用非常适合缓存使用 diff --git a/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T03_WeakReference.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T03_WeakReference.java new file mode 100644 index 0000000..d049f61 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T03_WeakReference.java @@ -0,0 +1,24 @@ +/** + * 弱引用遭到gc就会回收 + * + */ +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; + +import java.lang.ref.WeakReference; + +public class T03_WeakReference { + public static void main(String[] args) { + WeakReference m = new WeakReference<>(new M()); + + System.out.println(m.get()); + System.gc(); + System.out.println(m.get()); + + + ThreadLocal tl = new ThreadLocal<>(); + tl.set(new M()); + tl.remove(); + + } +} + diff --git a/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T04_PhantomReference.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T04_PhantomReference.java new file mode 100644 index 0000000..0f7bd2f --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/T04_PhantomReference.java @@ -0,0 +1,74 @@ +/** + * + * + * 一个对象是否有虚引用的存在,完全不会对其生存时间构成影响, + * 也无法通过虚引用来获取一个对象的实例。 + * 为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。 + * 虚引用和弱引用对关联对象的回收都不会产生影响,如果只有虚引用活着弱引用关联着对象, + * 那么这个对象就会被回收。它们的不同之处在于弱引用的get方法,虚引用的get方法始终返回null, + * 弱引用可以使用ReferenceQueue,虚引用必须配合ReferenceQueue使用。 + * + * jdk中直接内存的回收就用到虚引用,由于jvm自动内存管理的范围是堆内存, + * 而直接内存是在堆内存之外(其实是内存映射文件,自行去理解虚拟内存空间的相关概念), + * 所以直接内存的分配和回收都是有Unsafe类去操作,java在申请一块直接内存之后, + * 会在堆内存分配一个对象保存这个堆外内存的引用, + * 这个对象被垃圾收集器管理,一旦这个对象被回收, + * 相应的用户线程会收到通知并对直接内存进行清理工作。 + * + * 事实上,虚引用有一个很重要的用途就是用来做堆外内存的释放, + * DirectByteBuffer就是通过虚引用来实现堆外内存的释放的。 + * + */ + + +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; + +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.util.LinkedList; +import java.util.List; + +public class T04_PhantomReference { + private static final List LIST = new LinkedList<>(); + private static final ReferenceQueue QUEUE = new ReferenceQueue<>(); + + + + public static void main(String[] args) { + + + PhantomReference phantomReference = new PhantomReference<>(new M(), QUEUE); + + + new Thread(() -> { + while (true) { + LIST.add(new byte[1024 * 1024]); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + Thread.currentThread().interrupt(); + } + System.out.println(phantomReference.get()); + } + }).start(); + + new Thread(() -> { + while (true) { + Reference poll = QUEUE.poll(); + if (poll != null) { + System.out.println("--- 虚引用对象被jvm回收了 ---- " + poll); + } + } + }).start(); + + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } +} + diff --git a/src/main/java/com/mashibing/juc/c_022/ThreadLocal1.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/ThreadLocal1.java similarity index 91% rename from src/main/java/com/mashibing/juc/c_022/ThreadLocal1.java rename to src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/ThreadLocal1.java index 447ab6a..e7879d0 100644 --- a/src/main/java/com/mashibing/juc/c_022/ThreadLocal1.java +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/ThreadLocal1.java @@ -3,7 +3,7 @@ * * @author ʿ */ -package com.mashibing.juc.c_022; +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/com/mashibing/juc/c_022/ThreadLocal2.java b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/ThreadLocal2.java similarity index 92% rename from src/main/java/com/mashibing/juc/c_022/ThreadLocal2.java rename to src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/ThreadLocal2.java index 4c46cf8..84b0ac3 100644 --- a/src/main/java/com/mashibing/juc/c_022/ThreadLocal2.java +++ b/src/main/java/com/mashibing/juc/c_022_RefTypeAndThreadLocal/ThreadLocal2.java @@ -8,7 +8,7 @@ * * @author ʿ */ -package com.mashibing.juc.c_022; +package com.mashibing.juc.c_022_RefTypeAndThreadLocal; import java.util.concurrent.TimeUnit; @@ -35,7 +35,7 @@ public static void main(String[] args) { e.printStackTrace(); } tl.set(new Person()); - }).start(); + }).start(); } static class Person { diff --git a/src/main/java/com/mashibing/juc/c_023_01_Containers/HelloQueue.java b/src/main/java/com/mashibing/juc/c_023_01_Containers/HelloQueue.java new file mode 100644 index 0000000..78ed295 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_023_01_Containers/HelloQueue.java @@ -0,0 +1,20 @@ +package com.mashibing.juc.c_023_01_Containers; + +import java.util.ArrayDeque; +import java.util.LinkedList; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; + +public class HelloQueue { + public static void main(String[] args) { + Queue q = new ArrayBlockingQueue<>(2); + q.add(0); + q.add(1); + q.add(2); + q.add(3); + System.out.println(q); + + + } +} diff --git a/src/main/java/com/mashibing/juc/c_023_01_Containers/T01_HelloArray.java b/src/main/java/com/mashibing/juc/c_023_01_Containers/T01_HelloArray.java new file mode 100644 index 0000000..6e7aa51 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_023_01_Containers/T01_HelloArray.java @@ -0,0 +1,10 @@ +package com.mashibing.juc.c_023_01_Containers; + +import java.util.Arrays; + +public class T01_HelloArray { + public static void main(String[] args) { + int[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + Arrays.stream(a).map(i->i+1).forEach(i->System.out.print(i + " ")); + } +} diff --git a/src/main/java/com/mashibing/juc/c_023_01_Containers/T02_CollectionListSetQueue.java b/src/main/java/com/mashibing/juc/c_023_01_Containers/T02_CollectionListSetQueue.java new file mode 100644 index 0000000..cc18c84 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_023_01_Containers/T02_CollectionListSetQueue.java @@ -0,0 +1,18 @@ +package com.mashibing.juc.c_023_01_Containers; + +import java.util.*; + +public class T02_CollectionListSetQueue { + public static void main(String[] args) { + Collection c1 = new ArrayList(); + c1.add(1); + c1.add(2); + c1.add(3); + c1.stream().forEach(System.out::println); + + List c2 = new ArrayList<>(); + Set c3 = new HashSet<>(); + Queue c4 = new LinkedList<>(); + + } +} diff --git a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/Constants.java b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/Constants.java similarity index 68% rename from src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/Constants.java rename to src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/Constants.java index 6250be3..b93052e 100644 --- a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/Constants.java +++ b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/Constants.java @@ -1,4 +1,4 @@ -package com.mashibing.juc.c_023_02_FromVectorToCHM; +package com.mashibing.juc.c_023_02_FromHashtableToCHM; public class Constants { public static final int COUNT = 1000000; diff --git a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T01_TestHashtable.java b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T01_TestHashtable.java similarity index 97% rename from src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T01_TestHashtable.java rename to src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T01_TestHashtable.java index a83d178..fa95486 100644 --- a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T01_TestHashtable.java +++ b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T01_TestHashtable.java @@ -1,4 +1,4 @@ -package com.mashibing.juc.c_023_02_FromVectorToCHM; +package com.mashibing.juc.c_023_02_FromHashtableToCHM; import java.util.Hashtable; import java.util.UUID; diff --git a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T02_TestHashMap.java b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T02_TestHashMap.java similarity index 96% rename from src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T02_TestHashMap.java rename to src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T02_TestHashMap.java index fb1076e..fee53c0 100644 --- a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T02_TestHashMap.java +++ b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T02_TestHashMap.java @@ -1,4 +1,4 @@ -package com.mashibing.juc.c_023_02_FromVectorToCHM; +package com.mashibing.juc.c_023_02_FromHashtableToCHM; import java.util.HashMap; import java.util.UUID; diff --git a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T03_TestSynchronizedHashMap.java b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T03_TestSynchronizedHashMap.java similarity index 97% rename from src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T03_TestSynchronizedHashMap.java rename to src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T03_TestSynchronizedHashMap.java index 42651fb..d2f6f65 100644 --- a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T03_TestSynchronizedHashMap.java +++ b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T03_TestSynchronizedHashMap.java @@ -1,4 +1,4 @@ -package com.mashibing.juc.c_023_02_FromVectorToCHM; +package com.mashibing.juc.c_023_02_FromHashtableToCHM; import java.util.Collections; import java.util.HashMap; diff --git a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T04_TestConcurrentHashMap.java b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T04_TestConcurrentHashMap.java similarity index 97% rename from src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T04_TestConcurrentHashMap.java rename to src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T04_TestConcurrentHashMap.java index 7fe1880..7bd656c 100644 --- a/src/main/java/com/mashibing/juc/c_023_02_FromVectorToCHM/T04_TestConcurrentHashMap.java +++ b/src/main/java/com/mashibing/juc/c_023_02_FromHashtableToCHM/T04_TestConcurrentHashMap.java @@ -1,4 +1,4 @@ -package com.mashibing.juc.c_023_02_FromVectorToCHM; +package com.mashibing.juc.c_023_02_FromHashtableToCHM; import java.util.Map; import java.util.UUID; diff --git a/src/main/java/com/mashibing/juc/c_024/TicketSeller1.java b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller1.java similarity index 92% rename from src/main/java/com/mashibing/juc/c_024/TicketSeller1.java rename to src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller1.java index 440eaa4..18f9dc8 100644 --- a/src/main/java/com/mashibing/juc/c_024/TicketSeller1.java +++ b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller1.java @@ -9,7 +9,7 @@ * * @author ʿ */ -package com.mashibing.juc.c_024; +package com.mashibing.juc.c_024_FromVectorToQueue; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/juc/c_024/TicketSeller2.java b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller2.java similarity index 94% rename from src/main/java/com/mashibing/juc/c_024/TicketSeller2.java rename to src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller2.java index 307ab1d..98e26c7 100644 --- a/src/main/java/com/mashibing/juc/c_024/TicketSeller2.java +++ b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller2.java @@ -10,7 +10,7 @@ * * @author ʿ */ -package com.mashibing.juc.c_024; +package com.mashibing.juc.c_024_FromVectorToQueue; import java.util.Vector; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/com/mashibing/juc/c_024/TicketSeller3.java b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller3.java similarity index 95% rename from src/main/java/com/mashibing/juc/c_024/TicketSeller3.java rename to src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller3.java index 045c0da..9de6de2 100644 --- a/src/main/java/com/mashibing/juc/c_024/TicketSeller3.java +++ b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller3.java @@ -14,7 +14,7 @@ * * @author ʿ */ -package com.mashibing.juc.c_024; +package com.mashibing.juc.c_024_FromVectorToQueue; import java.util.LinkedList; import java.util.List; diff --git a/src/main/java/com/mashibing/juc/c_024/TicketSeller4.java b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller4.java similarity index 92% rename from src/main/java/com/mashibing/juc/c_024/TicketSeller4.java rename to src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller4.java index 2b86fd3..ae97461 100644 --- a/src/main/java/com/mashibing/juc/c_024/TicketSeller4.java +++ b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/TicketSeller4.java @@ -16,11 +16,10 @@ * * @author ʿ */ -package com.mashibing.juc.c_024; +package com.mashibing.juc.c_024_FromVectorToQueue; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.TimeUnit; public class TicketSeller4 { static Queue tickets = new ConcurrentLinkedQueue<>(); diff --git a/src/main/java/com/mashibing/juc/c_024/readme.txt b/src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/readme.txt similarity index 100% rename from src/main/java/com/mashibing/juc/c_024/readme.txt rename to src/main/java/com/mashibing/juc/c_024_FromVectorToQueue/readme.txt diff --git a/src/main/java/com/mashibing/juc/c_025/T01_ConcurrentMap.java b/src/main/java/com/mashibing/juc/c_025/T01_ConcurrentMap.java index 94de714..25dc6b3 100644 --- a/src/main/java/com/mashibing/juc/c_025/T01_ConcurrentMap.java +++ b/src/main/java/com/mashibing/juc/c_025/T01_ConcurrentMap.java @@ -5,18 +5,15 @@ */ package com.mashibing.juc.c_025; -import java.util.Arrays; -import java.util.Hashtable; -import java.util.Map; -import java.util.Random; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.CountDownLatch; public class T01_ConcurrentMap { public static void main(String[] args) { - //Map map = new ConcurrentHashMap<>(); - Map map = new ConcurrentSkipListMap<>(); //߲ + Map map = new ConcurrentHashMap<>(); + //Map map = new ConcurrentSkipListMap<>(); //߲ //Map map = new Hashtable<>(); //Map map = new HashMap<>(); //Collections.synchronizedXXX @@ -41,5 +38,6 @@ public static void main(String[] args) { long end = System.currentTimeMillis(); System.out.println(end - start); + System.out.println(map.size()); } } diff --git a/src/main/java/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.java b/src/main/java/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.java index e598552..9c3856a 100644 --- a/src/main/java/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.java +++ b/src/main/java/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.java @@ -16,10 +16,10 @@ public static void main(String[] args) throws InterruptedException { strs.put("a" + i); } - strs.put("aaa"); //˾ͻȴ + //strs.put("aaa"); //˾ͻȴ //strs.add("aaa"); //strs.offer("aaa"); - //strs.offer("aaa", 1, TimeUnit.SECONDS); + strs.offer("aaa", 1, TimeUnit.SECONDS); System.out.println(strs); } diff --git a/src/main/java/com/mashibing/juc/c_025/T07_01_PriorityQueque.java b/src/main/java/com/mashibing/juc/c_025/T07_01_PriorityQueque.java new file mode 100644 index 0000000..cc52f27 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_025/T07_01_PriorityQueque.java @@ -0,0 +1,20 @@ +package com.mashibing.juc.c_025; + +import java.util.PriorityQueue; + +public class T07_01_PriorityQueque { + public static void main(String[] args) { + PriorityQueue q = new PriorityQueue<>(); + + q.add("c"); + q.add("e"); + q.add("a"); + q.add("d"); + q.add("z"); + + for (int i = 0; i < 5; i++) { + System.out.println(q.poll()); + } + + } +} diff --git a/src/main/java/com/mashibing/juc/c_025/T07_DelayQueue.java b/src/main/java/com/mashibing/juc/c_025/T07_DelayQueue.java index 4450da4..3c8596e 100644 --- a/src/main/java/com/mashibing/juc/c_025/T07_DelayQueue.java +++ b/src/main/java/com/mashibing/juc/c_025/T07_DelayQueue.java @@ -14,9 +14,11 @@ public class T07_DelayQueue { static Random r = new Random(); static class MyTask implements Delayed { + String name; long runningTime; - MyTask(long rt) { + MyTask(String name, long rt) { + this.name = name; this.runningTime = rt; } @@ -39,17 +41,17 @@ public long getDelay(TimeUnit unit) { @Override public String toString() { - return "" + runningTime; + return name + " " + runningTime; } } public static void main(String[] args) throws InterruptedException { long now = System.currentTimeMillis(); - MyTask t1 = new MyTask(now + 1000); - MyTask t2 = new MyTask(now + 2000); - MyTask t3 = new MyTask(now + 1500); - MyTask t4 = new MyTask(now + 2500); - MyTask t5 = new MyTask(now + 500); + MyTask t1 = new MyTask("t1", now + 1000); + MyTask t2 = new MyTask("t2", now + 2000); + MyTask t3 = new MyTask("t3", now + 1500); + MyTask t4 = new MyTask("t4", now + 2500); + MyTask t5 = new MyTask("t5", now + 500); tasks.put(t1); tasks.put(t2); diff --git a/src/main/java/com/mashibing/juc/c_025/T09_SynchronusQueue.java b/src/main/java/com/mashibing/juc/c_025/T08_SynchronusQueue.java similarity index 88% rename from src/main/java/com/mashibing/juc/c_025/T09_SynchronusQueue.java rename to src/main/java/com/mashibing/juc/c_025/T08_SynchronusQueue.java index 1d845a4..4c5b262 100644 --- a/src/main/java/com/mashibing/juc/c_025/T09_SynchronusQueue.java +++ b/src/main/java/com/mashibing/juc/c_025/T08_SynchronusQueue.java @@ -3,7 +3,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.SynchronousQueue; -public class T09_SynchronusQueue { //Ϊ0 +public class T08_SynchronusQueue { //Ϊ0 public static void main(String[] args) throws InterruptedException { BlockingQueue strs = new SynchronousQueue<>(); @@ -14,8 +14,9 @@ public static void main(String[] args) throws InterruptedException { e.printStackTrace(); } }).start(); - + strs.put("aaa"); //ȴ + //strs.put("bbb"); //strs.add("aaa"); System.out.println(strs.size()); } diff --git a/src/main/java/com/mashibing/juc/c_025/T08_TransferQueue.java b/src/main/java/com/mashibing/juc/c_025/T09_TransferQueue.java similarity index 86% rename from src/main/java/com/mashibing/juc/c_025/T08_TransferQueue.java rename to src/main/java/com/mashibing/juc/c_025/T09_TransferQueue.java index 3b6b412..2297377 100644 --- a/src/main/java/com/mashibing/juc/c_025/T08_TransferQueue.java +++ b/src/main/java/com/mashibing/juc/c_025/T09_TransferQueue.java @@ -2,29 +2,31 @@ import java.util.concurrent.LinkedTransferQueue; -public class T08_TransferQueue { +public class T09_TransferQueue { public static void main(String[] args) throws InterruptedException { LinkedTransferQueue strs = new LinkedTransferQueue<>(); - /*new Thread(() -> { + new Thread(() -> { try { System.out.println(strs.take()); } catch (InterruptedException e) { e.printStackTrace(); } - }).start();*/ - - //strs.transfer("aaa"); + }).start(); - strs.put("aaa"); + strs.transfer("aaa"); + //strs.put("aaa"); - new Thread(() -> { + + /*new Thread(() -> { try { System.out.println(strs.take()); } catch (InterruptedException e) { e.printStackTrace(); } - }).start(); + }).start();*/ + + } } diff --git a/src/main/java/com/mashibing/juc/c_028_interview/A1B2C3/T13_Transfer.java b/src/main/java/com/mashibing/juc/c_028_interview/A1B2C3/T13_Transfer.java new file mode 100644 index 0000000..2f51fa1 --- /dev/null +++ b/src/main/java/com/mashibing/juc/c_028_interview/A1B2C3/T13_Transfer.java @@ -0,0 +1,4 @@ +package com.mashibing.juc.c_028_interview.A1B2C3; + +public class T13_Transfer { +} diff --git a/target/classes/META-INF/JUC.kotlin_module b/target/classes/META-INF/JUC.kotlin_module new file mode 100644 index 0000000..8fb6019 Binary files /dev/null and b/target/classes/META-INF/JUC.kotlin_module differ diff --git a/target/classes/Test.puml b/target/classes/Test.puml new file mode 100644 index 0000000..d0f7d79 --- /dev/null +++ b/target/classes/Test.puml @@ -0,0 +1,7 @@ +@startuml +Alice -> Bob: Authentication Request +Bob --> Alice: Authentication Response + +Alice -> Bob: Another authentication Request +Alice <-- Bob: another authentication Response +@enduml \ No newline at end of file diff --git a/target/classes/com/mashibing/JustTest.class b/target/classes/com/mashibing/JustTest.class new file mode 100644 index 0000000..75e37d8 Binary files /dev/null and b/target/classes/com/mashibing/JustTest.class differ diff --git a/target/classes/com/mashibing/disruptor/v1/LongEvent.class b/target/classes/com/mashibing/disruptor/v1/LongEvent.class new file mode 100644 index 0000000..ca6c527 Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v1/LongEvent.class differ diff --git a/target/classes/com/mashibing/disruptor/v1/LongEventHandler.class b/target/classes/com/mashibing/disruptor/v1/LongEventHandler.class new file mode 100644 index 0000000..1cae89f Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v1/LongEventHandler.class differ diff --git a/target/classes/com/mashibing/disruptor/v1/LongEventProducer.class b/target/classes/com/mashibing/disruptor/v1/LongEventProducer.class new file mode 100644 index 0000000..0deb84e Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v1/LongEventProducer.class differ diff --git a/target/classes/com/mashibing/disruptor/v1/Main.class b/target/classes/com/mashibing/disruptor/v1/Main.class new file mode 100644 index 0000000..d7446cf Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v1/Main.class differ diff --git a/target/classes/com/mashibing/disruptor/v2/LongEventFactory.class b/target/classes/com/mashibing/disruptor/v2/LongEventFactory.class new file mode 100644 index 0000000..2428291 Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v2/LongEventFactory.class differ diff --git a/target/classes/com/mashibing/disruptor/v2/LongEventProducer$1.class b/target/classes/com/mashibing/disruptor/v2/LongEventProducer$1.class new file mode 100644 index 0000000..094897f Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v2/LongEventProducer$1.class differ diff --git a/target/classes/com/mashibing/disruptor/v2/Main.class b/target/classes/com/mashibing/disruptor/v2/Main.class new file mode 100644 index 0000000..35397bb Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v2/Main.class differ diff --git a/target/classes/com/mashibing/disruptor/v3/Main.class b/target/classes/com/mashibing/disruptor/v3/Main.class new file mode 100644 index 0000000..1219edf Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v3/Main.class differ diff --git a/target/classes/com/mashibing/disruptor/v4/LongEvent.class b/target/classes/com/mashibing/disruptor/v4/LongEvent.class new file mode 100644 index 0000000..4652c5c Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v4/LongEvent.class differ diff --git a/target/classes/com/mashibing/disruptor/v4/Main.class b/target/classes/com/mashibing/disruptor/v4/Main.class new file mode 100644 index 0000000..bde8858 Binary files /dev/null and b/target/classes/com/mashibing/disruptor/v4/Main.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread$1.class b/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread$1.class new file mode 100644 index 0000000..dbaa733 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread$1.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread$T1.class b/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread$T1.class new file mode 100644 index 0000000..37831fc Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread$T1.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread.class b/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread.class new file mode 100644 index 0000000..ea93991 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T01_WhatIsThread.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T02_HowToCreateThread$MyRun.class b/target/classes/com/mashibing/juc/c_000/T02_HowToCreateThread$MyRun.class new file mode 100644 index 0000000..cfa5307 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T02_HowToCreateThread$MyRun.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T02_HowToCreateThread$MyThread.class b/target/classes/com/mashibing/juc/c_000/T02_HowToCreateThread$MyThread.class new file mode 100644 index 0000000..da7c9f7 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T02_HowToCreateThread$MyThread.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T03_Sleep_Yield_Join.class b/target/classes/com/mashibing/juc/c_000/T03_Sleep_Yield_Join.class new file mode 100644 index 0000000..8a73f81 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T03_Sleep_Yield_Join.class differ diff --git a/target/classes/com/mashibing/juc/c_000/T04_ThreadState.class b/target/classes/com/mashibing/juc/c_000/T04_ThreadState.class new file mode 100644 index 0000000..23ea201 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_000/T04_ThreadState.class differ diff --git a/target/classes/com/mashibing/juc/c_002/T.class b/target/classes/com/mashibing/juc/c_002/T.class new file mode 100644 index 0000000..0314f7e Binary files /dev/null and b/target/classes/com/mashibing/juc/c_002/T.class differ diff --git a/target/classes/com/mashibing/juc/c_003/T.class b/target/classes/com/mashibing/juc/c_003/T.class new file mode 100644 index 0000000..014c082 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_003/T.class differ diff --git a/target/classes/com/mashibing/juc/c_003/T1.class b/target/classes/com/mashibing/juc/c_003/T1.class new file mode 100644 index 0000000..84ee902 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_003/T1.class differ diff --git a/target/classes/com/mashibing/juc/c_005/T.class b/target/classes/com/mashibing/juc/c_005/T.class new file mode 100644 index 0000000..86065db Binary files /dev/null and b/target/classes/com/mashibing/juc/c_005/T.class differ diff --git a/target/classes/com/mashibing/juc/c_007/T.class b/target/classes/com/mashibing/juc/c_007/T.class new file mode 100644 index 0000000..5af737a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_007/T.class differ diff --git a/target/classes/com/mashibing/juc/c_008/Account.class b/target/classes/com/mashibing/juc/c_008/Account.class new file mode 100644 index 0000000..1fdcf0b Binary files /dev/null and b/target/classes/com/mashibing/juc/c_008/Account.class differ diff --git a/target/classes/com/mashibing/juc/c_009/T.class b/target/classes/com/mashibing/juc/c_009/T.class new file mode 100644 index 0000000..ab78466 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_009/T.class differ diff --git a/target/classes/com/mashibing/juc/c_010/T.class b/target/classes/com/mashibing/juc/c_010/T.class new file mode 100644 index 0000000..5a71cc6 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_010/T.class differ diff --git a/target/classes/com/mashibing/juc/c_011/T.class b/target/classes/com/mashibing/juc/c_011/T.class new file mode 100644 index 0000000..e807cf7 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_011/T.class differ diff --git a/target/classes/com/mashibing/juc/c_012_Volatile/T01_HelloVolatile.class b/target/classes/com/mashibing/juc/c_012_Volatile/T01_HelloVolatile.class new file mode 100644 index 0000000..886e6fe Binary files /dev/null and b/target/classes/com/mashibing/juc/c_012_Volatile/T01_HelloVolatile.class differ diff --git a/target/classes/com/mashibing/juc/c_012_Volatile/T03________VolatileReference2.class b/target/classes/com/mashibing/juc/c_012_Volatile/T03________VolatileReference2.class new file mode 100644 index 0000000..58272fe Binary files /dev/null and b/target/classes/com/mashibing/juc/c_012_Volatile/T03________VolatileReference2.class differ diff --git a/target/classes/com/mashibing/juc/c_012_Volatile/T04_VolatileNotSync.class b/target/classes/com/mashibing/juc/c_012_Volatile/T04_VolatileNotSync.class new file mode 100644 index 0000000..3ba22f5 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_012_Volatile/T04_VolatileNotSync.class differ diff --git a/target/classes/com/mashibing/juc/c_012_Volatile/T05_VolatileVsSync.class b/target/classes/com/mashibing/juc/c_012_Volatile/T05_VolatileVsSync.class new file mode 100644 index 0000000..d568750 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_012_Volatile/T05_VolatileVsSync.class differ diff --git a/target/classes/com/mashibing/juc/c_016_LockOptimization/FineCoarseLock.class b/target/classes/com/mashibing/juc/c_016_LockOptimization/FineCoarseLock.class new file mode 100644 index 0000000..74b2e35 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_016_LockOptimization/FineCoarseLock.class differ diff --git a/target/classes/com/mashibing/juc/c_017_MoreAboutSync/DoNotLockString.class b/target/classes/com/mashibing/juc/c_017_MoreAboutSync/DoNotLockString.class new file mode 100644 index 0000000..919a2bd Binary files /dev/null and b/target/classes/com/mashibing/juc/c_017_MoreAboutSync/DoNotLockString.class differ diff --git a/target/classes/com/mashibing/juc/c_017_MoreAboutSync/SyncSameObject.class b/target/classes/com/mashibing/juc/c_017_MoreAboutSync/SyncSameObject.class new file mode 100644 index 0000000..52bc263 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_017_MoreAboutSync/SyncSameObject.class differ diff --git a/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T01_AtomicInteger.class b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T01_AtomicInteger.class new file mode 100644 index 0000000..e36fb66 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T01_AtomicInteger.class differ diff --git a/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T02_AtomicVsSyncVsLongAdder$1.class b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T02_AtomicVsSyncVsLongAdder$1.class new file mode 100644 index 0000000..013f307 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T02_AtomicVsSyncVsLongAdder$1.class differ diff --git a/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T02_AtomicVsSyncVsLongAdder.class b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T02_AtomicVsSyncVsLongAdder.class new file mode 100644 index 0000000..4d05ba5 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T02_AtomicVsSyncVsLongAdder.class differ diff --git a/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T03________SyncVsLongAdder$1.class b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T03________SyncVsLongAdder$1.class new file mode 100644 index 0000000..97fa4cd Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T03________SyncVsLongAdder$1.class differ diff --git a/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T03________SyncVsLongAdder.class b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T03________SyncVsLongAdder.class new file mode 100644 index 0000000..cbfccc0 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_00_AtomicXXX/T03________SyncVsLongAdder.class differ diff --git a/target/classes/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe$M.class b/target/classes/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe$M.class new file mode 100644 index 0000000..919c687 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe$M.class differ diff --git a/target/classes/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.class b/target/classes/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.class new file mode 100644 index 0000000..0a333b0 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_018_01_Unsafe/HelloUnsafe.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T01_ReentrantLock1.class b/target/classes/com/mashibing/juc/c_020/T01_ReentrantLock1.class new file mode 100644 index 0000000..8055abd Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T01_ReentrantLock1.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T02_ReentrantLock2.class b/target/classes/com/mashibing/juc/c_020/T02_ReentrantLock2.class new file mode 100644 index 0000000..c41b42c Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T02_ReentrantLock2.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T03_ReentrantLock3.class b/target/classes/com/mashibing/juc/c_020/T03_ReentrantLock3.class new file mode 100644 index 0000000..b859713 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T03_ReentrantLock3.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T06_TestCountDownLatch.class b/target/classes/com/mashibing/juc/c_020/T06_TestCountDownLatch.class new file mode 100644 index 0000000..43089f8 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T06_TestCountDownLatch.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T08_TestPhaser$Person.class b/target/classes/com/mashibing/juc/c_020/T08_TestPhaser$Person.class new file mode 100644 index 0000000..6222e09 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T08_TestPhaser$Person.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T09_TestPhaser2$MarriagePhaser.class b/target/classes/com/mashibing/juc/c_020/T09_TestPhaser2$MarriagePhaser.class new file mode 100644 index 0000000..0e3a649 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T09_TestPhaser2$MarriagePhaser.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T09_TestPhaser2.class b/target/classes/com/mashibing/juc/c_020/T09_TestPhaser2.class new file mode 100644 index 0000000..05aa38a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T09_TestPhaser2.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T10_TestReadWriteLock.class b/target/classes/com/mashibing/juc/c_020/T10_TestReadWriteLock.class new file mode 100644 index 0000000..5434358 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T10_TestReadWriteLock.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T11_TestSemaphore.class b/target/classes/com/mashibing/juc/c_020/T11_TestSemaphore.class new file mode 100644 index 0000000..f871280 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T11_TestSemaphore.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T12_TestExchanger.class b/target/classes/com/mashibing/juc/c_020/T12_TestExchanger.class new file mode 100644 index 0000000..204166a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T12_TestExchanger.class differ diff --git a/target/classes/com/mashibing/juc/c_020/T13_TestLockSupport.class b/target/classes/com/mashibing/juc/c_020/T13_TestLockSupport.class new file mode 100644 index 0000000..4f1232e Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020/T13_TestLockSupport.class differ diff --git a/target/classes/com/mashibing/juc/c_020_01_Interview/T02_WithVolatile.class b/target/classes/com/mashibing/juc/c_020_01_Interview/T02_WithVolatile.class new file mode 100644 index 0000000..6e1e497 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020_01_Interview/T02_WithVolatile.class differ diff --git a/target/classes/com/mashibing/juc/c_020_01_Interview/T04_NotifyFreeLock.class b/target/classes/com/mashibing/juc/c_020_01_Interview/T04_NotifyFreeLock.class new file mode 100644 index 0000000..1619f8b Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020_01_Interview/T04_NotifyFreeLock.class differ diff --git a/target/classes/com/mashibing/juc/c_020_01_Interview/T05_CountDownLatch.class b/target/classes/com/mashibing/juc/c_020_01_Interview/T05_CountDownLatch.class new file mode 100644 index 0000000..666247a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020_01_Interview/T05_CountDownLatch.class differ diff --git a/target/classes/com/mashibing/juc/c_020_01_Interview/T06_LockSupport.class b/target/classes/com/mashibing/juc/c_020_01_Interview/T06_LockSupport.class new file mode 100644 index 0000000..7ad43a8 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020_01_Interview/T06_LockSupport.class differ diff --git a/target/classes/com/mashibing/juc/c_020_01_Interview/T08_Semaphore.class b/target/classes/com/mashibing/juc/c_020_01_Interview/T08_Semaphore.class new file mode 100644 index 0000000..b457118 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_020_01_Interview/T08_Semaphore.class differ diff --git a/target/classes/com/mashibing/juc/c_021_01_interview/MyContainer1.class b/target/classes/com/mashibing/juc/c_021_01_interview/MyContainer1.class new file mode 100644 index 0000000..d8e398e Binary files /dev/null and b/target/classes/com/mashibing/juc/c_021_01_interview/MyContainer1.class differ diff --git a/target/classes/com/mashibing/juc/c_021_02_AQS/TestReentrantLock.class b/target/classes/com/mashibing/juc/c_021_02_AQS/TestReentrantLock.class new file mode 100644 index 0000000..54ee649 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_021_02_AQS/TestReentrantLock.class differ diff --git a/target/classes/com/mashibing/juc/c_023/Singleton.class b/target/classes/com/mashibing/juc/c_023/Singleton.class new file mode 100644 index 0000000..499576b Binary files /dev/null and b/target/classes/com/mashibing/juc/c_023/Singleton.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T01_ConcurrentMap.class b/target/classes/com/mashibing/juc/c_025/T01_ConcurrentMap.class new file mode 100644 index 0000000..60aa544 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T01_ConcurrentMap.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T02_CopyOnWriteList$1.class b/target/classes/com/mashibing/juc/c_025/T02_CopyOnWriteList$1.class new file mode 100644 index 0000000..06f041a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T02_CopyOnWriteList$1.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T02_CopyOnWriteList.class b/target/classes/com/mashibing/juc/c_025/T02_CopyOnWriteList.class new file mode 100644 index 0000000..6966e69 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T02_CopyOnWriteList.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T03_SynchronizedList.class b/target/classes/com/mashibing/juc/c_025/T03_SynchronizedList.class new file mode 100644 index 0000000..f55fa32 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T03_SynchronizedList.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T04_ConcurrentQueue.class b/target/classes/com/mashibing/juc/c_025/T04_ConcurrentQueue.class new file mode 100644 index 0000000..1a916bf Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T04_ConcurrentQueue.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T05_LinkedBlockingQueue.class b/target/classes/com/mashibing/juc/c_025/T05_LinkedBlockingQueue.class new file mode 100644 index 0000000..7055c36 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T05_LinkedBlockingQueue.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.class b/target/classes/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.class new file mode 100644 index 0000000..4c1f710 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T06_ArrayBlockingQueue.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T07_DelayQueue$MyTask.class b/target/classes/com/mashibing/juc/c_025/T07_DelayQueue$MyTask.class new file mode 100644 index 0000000..fbb7af1 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T07_DelayQueue$MyTask.class differ diff --git a/target/classes/com/mashibing/juc/c_025/T07_DelayQueue.class b/target/classes/com/mashibing/juc/c_025/T07_DelayQueue.class new file mode 100644 index 0000000..2538818 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_025/T07_DelayQueue.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T01_MyExecutor.class b/target/classes/com/mashibing/juc/c_026/T01_MyExecutor.class new file mode 100644 index 0000000..6021f7b Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T01_MyExecutor.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T02_ExecutorService.class b/target/classes/com/mashibing/juc/c_026/T02_ExecutorService.class new file mode 100644 index 0000000..909b25f Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T02_ExecutorService.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T03_Callable.class b/target/classes/com/mashibing/juc/c_026/T03_Callable.class new file mode 100644 index 0000000..513bd91 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T03_Callable.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T04_Executors.class b/target/classes/com/mashibing/juc/c_026/T04_Executors.class new file mode 100644 index 0000000..2b47535 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T04_Executors.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T07_ParallelComputing$MyTask.class b/target/classes/com/mashibing/juc/c_026/T07_ParallelComputing$MyTask.class new file mode 100644 index 0000000..d7fdfa6 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T07_ParallelComputing$MyTask.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T07_ParallelComputing.class b/target/classes/com/mashibing/juc/c_026/T07_ParallelComputing.class new file mode 100644 index 0000000..e338190 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T07_ParallelComputing.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T09_SingleThreadPool.class b/target/classes/com/mashibing/juc/c_026/T09_SingleThreadPool.class new file mode 100644 index 0000000..c5123dc Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T09_SingleThreadPool.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T11_WorkStealingPool$R.class b/target/classes/com/mashibing/juc/c_026/T11_WorkStealingPool$R.class new file mode 100644 index 0000000..8cca0de Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T11_WorkStealingPool$R.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T11_WorkStealingPool.class b/target/classes/com/mashibing/juc/c_026/T11_WorkStealingPool.class new file mode 100644 index 0000000..ba62572 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T11_WorkStealingPool.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T13_ThreadPoolExecutor.class b/target/classes/com/mashibing/juc/c_026/T13_ThreadPoolExecutor.class new file mode 100644 index 0000000..c9f09ab Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T13_ThreadPoolExecutor.class differ diff --git a/target/classes/com/mashibing/juc/c_026/T14_ParallelStreamAPI.class b/target/classes/com/mashibing/juc/c_026/T14_ParallelStreamAPI.class new file mode 100644 index 0000000..5ad8ffe Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026/T14_ParallelStreamAPI.class differ diff --git a/target/classes/com/mashibing/juc/c_026_00_CompletableFuture/T01_CompletableFuture.class b/target/classes/com/mashibing/juc/c_026_00_CompletableFuture/T01_CompletableFuture.class new file mode 100644 index 0000000..99af434 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_026_00_CompletableFuture/T01_CompletableFuture.class differ diff --git a/target/classes/com/mashibing/juc/c_027_future_to_loom/T01_Future.class b/target/classes/com/mashibing/juc/c_027_future_to_loom/T01_Future.class new file mode 100644 index 0000000..4e05950 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_027_future_to_loom/T01_Future.class differ diff --git a/target/classes/com/mashibing/juc/c_027_future_to_loom/T02_ListenableFuture$2.class b/target/classes/com/mashibing/juc/c_027_future_to_loom/T02_ListenableFuture$2.class new file mode 100644 index 0000000..aa1ffb5 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_027_future_to_loom/T02_ListenableFuture$2.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T01_00_Question.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T01_00_Question.class new file mode 100644 index 0000000..5ac1a66 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T01_00_Question.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T04_00_lock_condition.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T04_00_lock_condition.class new file mode 100644 index 0000000..e4bd51a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T04_00_lock_condition.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T05_00_lock_condition.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T05_00_lock_condition.class new file mode 100644 index 0000000..4f54d2c Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T05_00_lock_condition.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T06_00_cas$ReadyToRun.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T06_00_cas$ReadyToRun.class new file mode 100644 index 0000000..59e46f5 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T06_00_cas$ReadyToRun.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T07_00_AtomicInteger.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T07_00_AtomicInteger.class new file mode 100644 index 0000000..f32fc53 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T07_00_AtomicInteger.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T08_00_LockSupport.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T08_00_LockSupport.class new file mode 100644 index 0000000..df65d5b Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T08_00_LockSupport.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T09_00_BlockingQueue.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T09_00_BlockingQueue.class new file mode 100644 index 0000000..edeb959 Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T09_00_BlockingQueue.class differ diff --git a/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T11_00_Semaphore.class b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T11_00_Semaphore.class new file mode 100644 index 0000000..0b8969a Binary files /dev/null and b/target/classes/com/mashibing/juc/c_028_interview/A1B2C3/T11_00_Semaphore.class differ