From 6b86dd88772a3a6dc82296be4f4da15715391ec4 Mon Sep 17 00:00:00 2001 From: lou Date: Tue, 24 Jul 2018 10:23:07 +0800 Subject: [PATCH 1/7] user spring --- codemarks/pom.xml | 2 +- concurrent/pom.xml | 2 +- concurrent/src/main/java/cas/AtomicSequence.java | 2 +- concurrent/src/main/java/cas/Sequence.java | 2 +- concurrent/src/main/java/juc/CopyOnWriteArrayTest.java | 2 +- concurrent/src/main/java/juc/CountDownLatchTest.java | 2 +- concurrent/src/main/java/juc/CyclicBarrierTest.java | 2 +- concurrent/src/main/java/juc/ExecutorTest.java | 2 +- concurrent/src/main/java/juc/ForkJoinTest.java | 2 +- concurrent/src/main/java/juc/SemaphoreTest.java | 2 +- concurrent/src/main/java/juc/ThreadPoolExecutorTest.java | 2 +- concurrent/src/main/java/juc/TimeUnitTest.java | 2 +- concurrent/src/main/java/juc/aqs/MutexLock.java | 2 +- concurrent/src/main/java/juc/aqs/MutexLockTest.java | 2 +- .../src/main/java/juc/automic/AtomicIntegerTest.java | 2 +- .../src/main/java/juc/automic/AtomicityProblemTest.java | 2 +- concurrent/src/main/java/juc/lock/ConditionTest.java | 2 +- concurrent/src/main/java/juc/lock/ReentrantLockTest.java | 2 +- .../main/java/juc/lock/ReentrantReadWriteLockTest.java | 2 +- .../java/pcmodel/ProducerConsumerModelBlockQueueImpl.java | 2 +- .../java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java | 2 +- .../java/synchronizeds/SynchronizedCodeBlockTest.java | 2 +- .../main/java/synchronizeds/SynchronizedMethodTest.java | 2 +- .../java/synchronizeds/SynchronizedStaticMethodTest.java | 2 +- .../src/main/java/synchronizeds/SynchronizedTest.java | 2 +- concurrent/src/main/java/thread/DeadlockTest.java | 2 +- concurrent/src/main/java/thread/HowToCreateThread.java | 2 +- concurrent/src/main/java/thread/InterruptTest.java | 2 +- concurrent/src/main/java/thread/JoinTest.java | 2 +- concurrent/src/main/java/thread/NotifyTest.java | 2 +- concurrent/src/main/java/thread/TimedJoinTest.java | 2 +- concurrent/src/main/java/thread/WaitTest.java | 2 +- concurrent/src/main/java/thread/YieldTest.java | 2 +- concurrent/src/main/java/unsafe/CustomAtomicInteger.java | 2 +- .../src/main/java/unsafe/PrivateConstructTestClass.java | 2 +- concurrent/src/main/java/unsafe/TestClass.java | 2 +- concurrent/src/main/java/unsafe/UnsafeLock.java | 2 +- concurrent/src/main/java/unsafe/UnsafeLockTest.java | 2 +- concurrent/src/main/java/unsafe/UnsafeTest.java | 2 +- concurrent/src/main/java/volatiles/Singleton.java | 8 ++++++-- concurrent/src/main/java/volatiles/VolatileTest.java | 2 +- container/pom.xml | 2 +- data-structure-algorithm/pom.xml | 2 +- .../src/main/java/arithmetic/BinarySearch.java | 2 +- .../src/main/java/arithmetic/BubbleSort.java | 2 +- .../src/main/java/arithmetic/HeapSort.java | 2 +- .../src/main/java/arithmetic/InsertSort.java | 2 +- .../src/main/java/arithmetic/QuickSort.java | 2 +- .../src/main/java/arithmetic/SelectSort.java | 2 +- .../src/main/java/arithmetic/ShellSort.java | 2 +- .../src/main/java/data/structure/queue/Queue.java | 2 +- .../main/java/data/structure/queue/QueueLinkedImpl.java | 2 +- .../src/main/java/data/structure/queue/Tester.java | 2 +- .../src/main/java/data/structure/stack/Stack.java | 2 +- .../main/java/data/structure/stack/StackArrayImpl.java | 2 +- .../main/java/data/structure/stack/StackLinkedImpl.java | 2 +- .../src/main/java/data/structure/stack/Tester.java | 2 +- design-pattern/pom.xml | 2 +- .../src/main/java/creational/AbstractFactoryPattern.java | 2 +- .../src/main/java/creational/FactoryMethodPattern.java | 2 +- .../src/main/java/creational/PrototypePattern.java | 2 +- .../src/main/java/creational/SimpleFactoryPattern.java | 2 +- .../src/main/java/creational/SingletonPattern.java | 2 +- .../main/java/creational/StaticFactoryMethodPattern.java | 2 +- .../src/main/java/structural/AdapterPattern.java | 2 +- .../src/main/java/structural/BridgePattern.java | 2 +- .../src/main/java/structural/DecoratorPattern.java | 2 +- .../src/main/java/structural/FacadePattern.java | 2 +- design-pattern/src/main/java/structural/ProxyPattern.java | 2 +- io/pom.xml | 2 +- io/src/main/java/ReadFile.java | 2 +- jvm/pom.xml | 2 +- jvm/src/main/java/Test.java | 2 +- jvm/src/main/java/classloader/CustomClassLoader.java | 6 +++++- pom.xml | 2 +- socket/pom.xml | 2 +- socket/src/main/java/echo/Client.java | 2 +- socket/src/main/java/echo/EchoServer.java | 2 +- socket/src/main/java/netty/HelloClient.java | 2 +- socket/src/main/java/netty/NettyTest.java | 2 +- socket/src/main/java/rpc/RpcTest.java | 2 +- socket/src/main/java/rpc/SimpleRpcFramework.java | 2 +- 82 files changed, 91 insertions(+), 83 deletions(-) diff --git a/codemarks/pom.xml b/codemarks/pom.xml index 8903370..d0f3d60 100644 --- a/codemarks/pom.xml +++ b/codemarks/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/concurrent/pom.xml b/concurrent/pom.xml index 55cbc0b..c6762fd 100644 --- a/concurrent/pom.xml +++ b/concurrent/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/concurrent/src/main/java/cas/AtomicSequence.java b/concurrent/src/main/java/cas/AtomicSequence.java index 974f0a1..0ca3265 100644 --- a/concurrent/src/main/java/cas/AtomicSequence.java +++ b/concurrent/src/main/java/cas/AtomicSequence.java @@ -3,7 +3,7 @@ import java.util.concurrent.atomic.AtomicInteger; /** - * Created by 李恒名 on 2017/6/20. + * Created by on 2017/6/20. */ public class AtomicSequence { private AtomicInteger value = new AtomicInteger(); diff --git a/concurrent/src/main/java/cas/Sequence.java b/concurrent/src/main/java/cas/Sequence.java index 3ff1859..0f0273b 100644 --- a/concurrent/src/main/java/cas/Sequence.java +++ b/concurrent/src/main/java/cas/Sequence.java @@ -1,7 +1,7 @@ package cas; /** - * Created by 李恒名 on 2017/6/20. + * Created by on 2017/6/20. */ public class Sequence { private int value; diff --git a/concurrent/src/main/java/juc/CopyOnWriteArrayTest.java b/concurrent/src/main/java/juc/CopyOnWriteArrayTest.java index 4137ffc..3943d7b 100644 --- a/concurrent/src/main/java/juc/CopyOnWriteArrayTest.java +++ b/concurrent/src/main/java/juc/CopyOnWriteArrayTest.java @@ -4,7 +4,7 @@ import java.util.concurrent.CopyOnWriteArrayList; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class CopyOnWriteArrayTest { diff --git a/concurrent/src/main/java/juc/CountDownLatchTest.java b/concurrent/src/main/java/juc/CountDownLatchTest.java index 7bed6bd..4b89a27 100644 --- a/concurrent/src/main/java/juc/CountDownLatchTest.java +++ b/concurrent/src/main/java/juc/CountDownLatchTest.java @@ -3,7 +3,7 @@ import java.util.concurrent.CountDownLatch; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class CountDownLatchTest { static CountDownLatch latch = new CountDownLatch(3);//创建计数器并设置初始值为3 diff --git a/concurrent/src/main/java/juc/CyclicBarrierTest.java b/concurrent/src/main/java/juc/CyclicBarrierTest.java index 96b7b80..38cfeb1 100644 --- a/concurrent/src/main/java/juc/CyclicBarrierTest.java +++ b/concurrent/src/main/java/juc/CyclicBarrierTest.java @@ -4,7 +4,7 @@ import java.util.concurrent.CyclicBarrier; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class CyclicBarrierTest { //定义一个barrier并设置parties,当线程数达到parties后,barrier失效,线程可以继续运行,在未达到parties值之前,线程将持续等待。 diff --git a/concurrent/src/main/java/juc/ExecutorTest.java b/concurrent/src/main/java/juc/ExecutorTest.java index 26673d4..106b3fd 100644 --- a/concurrent/src/main/java/juc/ExecutorTest.java +++ b/concurrent/src/main/java/juc/ExecutorTest.java @@ -3,7 +3,7 @@ import java.util.concurrent.*; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class ExecutorTest { public static void main(String[] args) { diff --git a/concurrent/src/main/java/juc/ForkJoinTest.java b/concurrent/src/main/java/juc/ForkJoinTest.java index 8b296d1..8213168 100644 --- a/concurrent/src/main/java/juc/ForkJoinTest.java +++ b/concurrent/src/main/java/juc/ForkJoinTest.java @@ -5,7 +5,7 @@ import java.util.concurrent.RecursiveTask; /** - * Created by 李恒名 on 2017/6/19. + * Created by on 2017/6/19. */ public class ForkJoinTest { diff --git a/concurrent/src/main/java/juc/SemaphoreTest.java b/concurrent/src/main/java/juc/SemaphoreTest.java index 0ab226c..0a6a8ca 100644 --- a/concurrent/src/main/java/juc/SemaphoreTest.java +++ b/concurrent/src/main/java/juc/SemaphoreTest.java @@ -4,7 +4,7 @@ import java.util.concurrent.TimeUnit; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class SemaphoreTest { public static void main(String[] args) { diff --git a/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java b/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java index 2fc8f37..6c45c75 100644 --- a/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java +++ b/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java @@ -6,7 +6,7 @@ import java.util.concurrent.TimeUnit; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class ThreadPoolExecutorTest { public static void main(String[] args) { diff --git a/concurrent/src/main/java/juc/TimeUnitTest.java b/concurrent/src/main/java/juc/TimeUnitTest.java index 5dc6d5a..6e892a0 100644 --- a/concurrent/src/main/java/juc/TimeUnitTest.java +++ b/concurrent/src/main/java/juc/TimeUnitTest.java @@ -3,7 +3,7 @@ import java.util.concurrent.TimeUnit; /** - * Created by 李恒名 on 2017/6/17. + * Created by on 2017/6/17. */ public class TimeUnitTest { diff --git a/concurrent/src/main/java/juc/aqs/MutexLock.java b/concurrent/src/main/java/juc/aqs/MutexLock.java index 37bd026..2487eb1 100644 --- a/concurrent/src/main/java/juc/aqs/MutexLock.java +++ b/concurrent/src/main/java/juc/aqs/MutexLock.java @@ -8,7 +8,7 @@ import java.util.concurrent.locks.Lock; /** - * Created by 李恒名 on 2017/6/22. + * Created by on 2017/6/22. */ public class MutexLock implements Lock, java.io.Serializable { diff --git a/concurrent/src/main/java/juc/aqs/MutexLockTest.java b/concurrent/src/main/java/juc/aqs/MutexLockTest.java index 95234a8..fc80908 100644 --- a/concurrent/src/main/java/juc/aqs/MutexLockTest.java +++ b/concurrent/src/main/java/juc/aqs/MutexLockTest.java @@ -1,7 +1,7 @@ package juc.aqs; /** - * Created by 李恒名 on 2017/6/22. + * Created by on 2017/6/22. */ public class MutexLockTest { public static void main(String[] args) { diff --git a/concurrent/src/main/java/juc/automic/AtomicIntegerTest.java b/concurrent/src/main/java/juc/automic/AtomicIntegerTest.java index bf2d261..3c766fb 100644 --- a/concurrent/src/main/java/juc/automic/AtomicIntegerTest.java +++ b/concurrent/src/main/java/juc/automic/AtomicIntegerTest.java @@ -5,7 +5,7 @@ import java.util.concurrent.atomic.AtomicInteger; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class AtomicIntegerTest { diff --git a/concurrent/src/main/java/juc/automic/AtomicityProblemTest.java b/concurrent/src/main/java/juc/automic/AtomicityProblemTest.java index e4e46d9..8d27561 100644 --- a/concurrent/src/main/java/juc/automic/AtomicityProblemTest.java +++ b/concurrent/src/main/java/juc/automic/AtomicityProblemTest.java @@ -3,7 +3,7 @@ import org.junit.Assert; /** - * Created by 李恒名 on 2017/6/17. + * Created by on 2017/6/17. */ public class AtomicityProblemTest { diff --git a/concurrent/src/main/java/juc/lock/ConditionTest.java b/concurrent/src/main/java/juc/lock/ConditionTest.java index 59a8146..9df149e 100644 --- a/concurrent/src/main/java/juc/lock/ConditionTest.java +++ b/concurrent/src/main/java/juc/lock/ConditionTest.java @@ -5,7 +5,7 @@ import java.util.concurrent.locks.ReentrantLock; /** - * Created by 李恒名 on 2017/6/18. + * Created by on 2017/6/18. */ public class ConditionTest { private final Lock lock = new ReentrantLock(); diff --git a/concurrent/src/main/java/juc/lock/ReentrantLockTest.java b/concurrent/src/main/java/juc/lock/ReentrantLockTest.java index cfa4c08..03051fd 100644 --- a/concurrent/src/main/java/juc/lock/ReentrantLockTest.java +++ b/concurrent/src/main/java/juc/lock/ReentrantLockTest.java @@ -4,7 +4,7 @@ import java.util.concurrent.locks.ReentrantLock; /** - * Created by 李恒名 on 2017/6/17. + * Created by on 2017/6/17. */ public class ReentrantLockTest { diff --git a/concurrent/src/main/java/juc/lock/ReentrantReadWriteLockTest.java b/concurrent/src/main/java/juc/lock/ReentrantReadWriteLockTest.java index 928fc11..05eaa05 100644 --- a/concurrent/src/main/java/juc/lock/ReentrantReadWriteLockTest.java +++ b/concurrent/src/main/java/juc/lock/ReentrantReadWriteLockTest.java @@ -4,7 +4,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; /** - * Created by 李恒名 on 2017/6/17. + * Created by on 2017/6/17. */ public class ReentrantReadWriteLockTest { diff --git a/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java b/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java index 403ca77..6145724 100644 --- a/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java +++ b/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java @@ -6,7 +6,7 @@ import java.util.concurrent.LinkedBlockingQueue; /** - * Created by 李恒名 on 2017/6/19. + * Created by on 2017/6/19. *

* 生产者-消费者模型的阻塞队列实现 */ diff --git a/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java b/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java index c0d8e57..5ceba11 100644 --- a/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java +++ b/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java @@ -6,7 +6,7 @@ import java.util.concurrent.Executors; /** - * Created by 李恒名 on 2017/6/19. + * Created by on 2017/6/19. * * 生产者-消费者模型的 Object.wait()、notify()实现 */ diff --git a/concurrent/src/main/java/synchronizeds/SynchronizedCodeBlockTest.java b/concurrent/src/main/java/synchronizeds/SynchronizedCodeBlockTest.java index 544cc5f..bc0d581 100644 --- a/concurrent/src/main/java/synchronizeds/SynchronizedCodeBlockTest.java +++ b/concurrent/src/main/java/synchronizeds/SynchronizedCodeBlockTest.java @@ -1,7 +1,7 @@ package synchronizeds; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. *

* 同步代码块 */ diff --git a/concurrent/src/main/java/synchronizeds/SynchronizedMethodTest.java b/concurrent/src/main/java/synchronizeds/SynchronizedMethodTest.java index c6f77a9..8ee449e 100644 --- a/concurrent/src/main/java/synchronizeds/SynchronizedMethodTest.java +++ b/concurrent/src/main/java/synchronizeds/SynchronizedMethodTest.java @@ -1,7 +1,7 @@ package synchronizeds; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. *

* 同步成员方法 */ diff --git a/concurrent/src/main/java/synchronizeds/SynchronizedStaticMethodTest.java b/concurrent/src/main/java/synchronizeds/SynchronizedStaticMethodTest.java index c7a3220..6e89681 100644 --- a/concurrent/src/main/java/synchronizeds/SynchronizedStaticMethodTest.java +++ b/concurrent/src/main/java/synchronizeds/SynchronizedStaticMethodTest.java @@ -1,7 +1,7 @@ package synchronizeds; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. * * 同步静态方法 */ diff --git a/concurrent/src/main/java/synchronizeds/SynchronizedTest.java b/concurrent/src/main/java/synchronizeds/SynchronizedTest.java index 235db28..fb57b32 100644 --- a/concurrent/src/main/java/synchronizeds/SynchronizedTest.java +++ b/concurrent/src/main/java/synchronizeds/SynchronizedTest.java @@ -1,7 +1,7 @@ package synchronizeds; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. */ public class SynchronizedTest { diff --git a/concurrent/src/main/java/thread/DeadlockTest.java b/concurrent/src/main/java/thread/DeadlockTest.java index 88e90ef..7918d72 100644 --- a/concurrent/src/main/java/thread/DeadlockTest.java +++ b/concurrent/src/main/java/thread/DeadlockTest.java @@ -3,7 +3,7 @@ import java.util.concurrent.TimeUnit; /** - * Created by 李恒名 on 2017/8/29. + * Created by on 2017/8/29. * * 死锁测试,线程1获得A锁(monitor)之后尝试获得B锁,线程2获得B锁后尝试获得A锁,线程1和线程2即产生死锁。 */ diff --git a/concurrent/src/main/java/thread/HowToCreateThread.java b/concurrent/src/main/java/thread/HowToCreateThread.java index 28493e6..0bf796a 100644 --- a/concurrent/src/main/java/thread/HowToCreateThread.java +++ b/concurrent/src/main/java/thread/HowToCreateThread.java @@ -3,7 +3,7 @@ import java.util.concurrent.*; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class HowToCreateThread { diff --git a/concurrent/src/main/java/thread/InterruptTest.java b/concurrent/src/main/java/thread/InterruptTest.java index 561e49a..b05ecb3 100644 --- a/concurrent/src/main/java/thread/InterruptTest.java +++ b/concurrent/src/main/java/thread/InterruptTest.java @@ -1,7 +1,7 @@ package thread; /** - * Created by 李恒名 on 2017/6/16. + * Created by on 2017/6/16. */ public class InterruptTest { diff --git a/concurrent/src/main/java/thread/JoinTest.java b/concurrent/src/main/java/thread/JoinTest.java index 2a99aaa..20e1732 100644 --- a/concurrent/src/main/java/thread/JoinTest.java +++ b/concurrent/src/main/java/thread/JoinTest.java @@ -1,7 +1,7 @@ package thread; /** - * Created by 李恒名 on 2017/6/16. + * Created by on 2017/6/16. */ public class JoinTest { diff --git a/concurrent/src/main/java/thread/NotifyTest.java b/concurrent/src/main/java/thread/NotifyTest.java index b5c61f5..1efa40d 100644 --- a/concurrent/src/main/java/thread/NotifyTest.java +++ b/concurrent/src/main/java/thread/NotifyTest.java @@ -1,7 +1,7 @@ package thread; /** - * Created by 李恒名 on 2017/6/16. + * Created by on 2017/6/16. */ public class NotifyTest { diff --git a/concurrent/src/main/java/thread/TimedJoinTest.java b/concurrent/src/main/java/thread/TimedJoinTest.java index edd1bff..fa77dc1 100644 --- a/concurrent/src/main/java/thread/TimedJoinTest.java +++ b/concurrent/src/main/java/thread/TimedJoinTest.java @@ -1,7 +1,7 @@ package thread; /** - * Created by 李恒名 on 2017/6/16. + * Created by on 2017/6/16. */ public class TimedJoinTest { diff --git a/concurrent/src/main/java/thread/WaitTest.java b/concurrent/src/main/java/thread/WaitTest.java index 01158d0..3d84646 100644 --- a/concurrent/src/main/java/thread/WaitTest.java +++ b/concurrent/src/main/java/thread/WaitTest.java @@ -1,7 +1,7 @@ package thread; /** - * Created by 李恒名 on 2017/6/16. + * Created by on 2017/6/16. */ public class WaitTest { diff --git a/concurrent/src/main/java/thread/YieldTest.java b/concurrent/src/main/java/thread/YieldTest.java index 189d4e4..755656c 100644 --- a/concurrent/src/main/java/thread/YieldTest.java +++ b/concurrent/src/main/java/thread/YieldTest.java @@ -1,7 +1,7 @@ package thread; /** - * Created by 李恒名 on 2017/6/16. + * Created by on 2017/6/16. */ public class YieldTest { diff --git a/concurrent/src/main/java/unsafe/CustomAtomicInteger.java b/concurrent/src/main/java/unsafe/CustomAtomicInteger.java index f598261..6e51da3 100644 --- a/concurrent/src/main/java/unsafe/CustomAtomicInteger.java +++ b/concurrent/src/main/java/unsafe/CustomAtomicInteger.java @@ -7,7 +7,7 @@ import java.util.concurrent.CountDownLatch; /** - * Created by 李恒名 on 2017/6/20. + * Created by on 2017/6/20. */ public class CustomAtomicInteger { private volatile int value; diff --git a/concurrent/src/main/java/unsafe/PrivateConstructTestClass.java b/concurrent/src/main/java/unsafe/PrivateConstructTestClass.java index 6fb0e1c..6f1accf 100644 --- a/concurrent/src/main/java/unsafe/PrivateConstructTestClass.java +++ b/concurrent/src/main/java/unsafe/PrivateConstructTestClass.java @@ -1,7 +1,7 @@ package unsafe; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. */ public class PrivateConstructTestClass { diff --git a/concurrent/src/main/java/unsafe/TestClass.java b/concurrent/src/main/java/unsafe/TestClass.java index 4bdc10c..6d44eba 100644 --- a/concurrent/src/main/java/unsafe/TestClass.java +++ b/concurrent/src/main/java/unsafe/TestClass.java @@ -1,7 +1,7 @@ package unsafe; /** - * Created by 李恒名 on 2017/6/21. + * Created by on 2017/6/21. */ public class TestClass { private int value;// 没有初始化 diff --git a/concurrent/src/main/java/unsafe/UnsafeLock.java b/concurrent/src/main/java/unsafe/UnsafeLock.java index 863824f..ec523c1 100644 --- a/concurrent/src/main/java/unsafe/UnsafeLock.java +++ b/concurrent/src/main/java/unsafe/UnsafeLock.java @@ -5,7 +5,7 @@ import java.lang.reflect.Constructor; /** - * Created by 李恒名 on 2017/6/21. + * Created by on 2017/6/21. */ public class UnsafeLock { private Unsafe unsafe; diff --git a/concurrent/src/main/java/unsafe/UnsafeLockTest.java b/concurrent/src/main/java/unsafe/UnsafeLockTest.java index 1c79610..b031cc3 100644 --- a/concurrent/src/main/java/unsafe/UnsafeLockTest.java +++ b/concurrent/src/main/java/unsafe/UnsafeLockTest.java @@ -1,7 +1,7 @@ package unsafe; /** - * Created by 李恒名 on 2017/6/21. + * Created by on 2017/6/21. */ public class UnsafeLockTest { diff --git a/concurrent/src/main/java/unsafe/UnsafeTest.java b/concurrent/src/main/java/unsafe/UnsafeTest.java index d3e1ad1..41b3902 100644 --- a/concurrent/src/main/java/unsafe/UnsafeTest.java +++ b/concurrent/src/main/java/unsafe/UnsafeTest.java @@ -11,7 +11,7 @@ import java.lang.reflect.Method; /** - * Created by 李恒名 on 2017/6/20. + * Created by on 2017/6/20. */ public class UnsafeTest { private Unsafe unsafe; diff --git a/concurrent/src/main/java/volatiles/Singleton.java b/concurrent/src/main/java/volatiles/Singleton.java index d5fa659..f5f4e46 100644 --- a/concurrent/src/main/java/volatiles/Singleton.java +++ b/concurrent/src/main/java/volatiles/Singleton.java @@ -1,13 +1,13 @@ package volatiles; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. */ public class Singleton { private volatile static Singleton instance; private Singleton() { - new AssertionError("don't support reflect."); + new AssertionError("don't support reflect.");// } public static Singleton getInstance() { @@ -20,6 +20,10 @@ public static Singleton getInstance() { } return instance; } + + public static void main(String[] args) { + + } } diff --git a/concurrent/src/main/java/volatiles/VolatileTest.java b/concurrent/src/main/java/volatiles/VolatileTest.java index b87909b..1fb17d1 100644 --- a/concurrent/src/main/java/volatiles/VolatileTest.java +++ b/concurrent/src/main/java/volatiles/VolatileTest.java @@ -1,7 +1,7 @@ package volatiles; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. */ public class VolatileTest { diff --git a/container/pom.xml b/container/pom.xml index cbc9689..c3b5ee6 100644 --- a/container/pom.xml +++ b/container/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/data-structure-algorithm/pom.xml b/data-structure-algorithm/pom.xml index e8e5936..7e74736 100644 --- a/data-structure-algorithm/pom.xml +++ b/data-structure-algorithm/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/data-structure-algorithm/src/main/java/arithmetic/BinarySearch.java b/data-structure-algorithm/src/main/java/arithmetic/BinarySearch.java index bd88db0..83b6899 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/BinarySearch.java +++ b/data-structure-algorithm/src/main/java/arithmetic/BinarySearch.java @@ -5,7 +5,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/23. + * Created by on 2017/6/23. */ public class BinarySearch { diff --git a/data-structure-algorithm/src/main/java/arithmetic/BubbleSort.java b/data-structure-algorithm/src/main/java/arithmetic/BubbleSort.java index 3fc64f8..0ec403d 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/BubbleSort.java +++ b/data-structure-algorithm/src/main/java/arithmetic/BubbleSort.java @@ -3,7 +3,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. *

* 冒泡排序 */ diff --git a/data-structure-algorithm/src/main/java/arithmetic/HeapSort.java b/data-structure-algorithm/src/main/java/arithmetic/HeapSort.java index 454beb9..4698a39 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/HeapSort.java +++ b/data-structure-algorithm/src/main/java/arithmetic/HeapSort.java @@ -3,7 +3,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. *

* 堆排序,对简单选择排序的优化。 * 1. 将序列构建成大顶堆。 diff --git a/data-structure-algorithm/src/main/java/arithmetic/InsertSort.java b/data-structure-algorithm/src/main/java/arithmetic/InsertSort.java index 445e708..48a519d 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/InsertSort.java +++ b/data-structure-algorithm/src/main/java/arithmetic/InsertSort.java @@ -3,7 +3,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. */ public class InsertSort { public static void sort(int[] arr) { diff --git a/data-structure-algorithm/src/main/java/arithmetic/QuickSort.java b/data-structure-algorithm/src/main/java/arithmetic/QuickSort.java index ba05c74..4367f40 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/QuickSort.java +++ b/data-structure-algorithm/src/main/java/arithmetic/QuickSort.java @@ -3,7 +3,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. */ public class QuickSort { diff --git a/data-structure-algorithm/src/main/java/arithmetic/SelectSort.java b/data-structure-algorithm/src/main/java/arithmetic/SelectSort.java index d652140..a04b36c 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/SelectSort.java +++ b/data-structure-algorithm/src/main/java/arithmetic/SelectSort.java @@ -3,7 +3,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. */ public class SelectSort { public static void sort(int[] arr) { diff --git a/data-structure-algorithm/src/main/java/arithmetic/ShellSort.java b/data-structure-algorithm/src/main/java/arithmetic/ShellSort.java index 3f4fd59..e86d4cb 100644 --- a/data-structure-algorithm/src/main/java/arithmetic/ShellSort.java +++ b/data-structure-algorithm/src/main/java/arithmetic/ShellSort.java @@ -3,7 +3,7 @@ import java.util.Arrays; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. */ public class ShellSort { diff --git a/data-structure-algorithm/src/main/java/data/structure/queue/Queue.java b/data-structure-algorithm/src/main/java/data/structure/queue/Queue.java index 14a6a9d..a872a5d 100644 --- a/data-structure-algorithm/src/main/java/data/structure/queue/Queue.java +++ b/data-structure-algorithm/src/main/java/data/structure/queue/Queue.java @@ -1,7 +1,7 @@ package data.structure.queue; /** - * Created by 李恒名 on 2017/6/15. + * Created by on 2017/6/15. * * 队列(Queue),是先进先出(FIFO, First-In-First-Out)的线性表 */ diff --git a/data-structure-algorithm/src/main/java/data/structure/queue/QueueLinkedImpl.java b/data-structure-algorithm/src/main/java/data/structure/queue/QueueLinkedImpl.java index c0c8e9c..a7f6b9a 100644 --- a/data-structure-algorithm/src/main/java/data/structure/queue/QueueLinkedImpl.java +++ b/data-structure-algorithm/src/main/java/data/structure/queue/QueueLinkedImpl.java @@ -1,7 +1,7 @@ package data.structure.queue; /** - * Created by 李恒名 on 2017/6/23. + * Created by on 2017/6/23. *

* 保存指向首尾节点的指针,每次从链表尾插入,从链表头删除。 */ diff --git a/data-structure-algorithm/src/main/java/data/structure/queue/Tester.java b/data-structure-algorithm/src/main/java/data/structure/queue/Tester.java index 3a27a26..a1c1756 100644 --- a/data-structure-algorithm/src/main/java/data/structure/queue/Tester.java +++ b/data-structure-algorithm/src/main/java/data/structure/queue/Tester.java @@ -3,7 +3,7 @@ import org.junit.Test; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class Tester { diff --git a/data-structure-algorithm/src/main/java/data/structure/stack/Stack.java b/data-structure-algorithm/src/main/java/data/structure/stack/Stack.java index f1c8b51..543e22b 100644 --- a/data-structure-algorithm/src/main/java/data/structure/stack/Stack.java +++ b/data-structure-algorithm/src/main/java/data/structure/stack/Stack.java @@ -1,7 +1,7 @@ package data.structure.stack; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. *

* 后进先出(LIFO, Last In First Out) */ diff --git a/data-structure-algorithm/src/main/java/data/structure/stack/StackArrayImpl.java b/data-structure-algorithm/src/main/java/data/structure/stack/StackArrayImpl.java index 8010591..288e634 100644 --- a/data-structure-algorithm/src/main/java/data/structure/stack/StackArrayImpl.java +++ b/data-structure-algorithm/src/main/java/data/structure/stack/StackArrayImpl.java @@ -1,7 +1,7 @@ package data.structure.stack; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class StackArrayImpl implements Stack { diff --git a/data-structure-algorithm/src/main/java/data/structure/stack/StackLinkedImpl.java b/data-structure-algorithm/src/main/java/data/structure/stack/StackLinkedImpl.java index 0a059e3..bc86ff6 100644 --- a/data-structure-algorithm/src/main/java/data/structure/stack/StackLinkedImpl.java +++ b/data-structure-algorithm/src/main/java/data/structure/stack/StackLinkedImpl.java @@ -1,7 +1,7 @@ package data.structure.stack; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. * */ public class StackLinkedImpl implements Stack { diff --git a/data-structure-algorithm/src/main/java/data/structure/stack/Tester.java b/data-structure-algorithm/src/main/java/data/structure/stack/Tester.java index 0053fe5..4150757 100644 --- a/data-structure-algorithm/src/main/java/data/structure/stack/Tester.java +++ b/data-structure-algorithm/src/main/java/data/structure/stack/Tester.java @@ -3,7 +3,7 @@ import org.junit.Test; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class Tester { diff --git a/design-pattern/pom.xml b/design-pattern/pom.xml index 80f1961..e7c8d6e 100644 --- a/design-pattern/pom.xml +++ b/design-pattern/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/design-pattern/src/main/java/creational/AbstractFactoryPattern.java b/design-pattern/src/main/java/creational/AbstractFactoryPattern.java index a40d8b9..7e2fcc9 100644 --- a/design-pattern/src/main/java/creational/AbstractFactoryPattern.java +++ b/design-pattern/src/main/java/creational/AbstractFactoryPattern.java @@ -1,7 +1,7 @@ package creational; /** - * Created by 李恒名 on 2017/7/16. + * Created by on 2017/7/16. *

* 抽象工厂模式,与简单工厂、工厂方法模式的区别在于,前者只有一个产品线只为创建一个 * 产品服务,而后者则拥有多个产品线。 diff --git a/design-pattern/src/main/java/creational/FactoryMethodPattern.java b/design-pattern/src/main/java/creational/FactoryMethodPattern.java index eea01d1..c9e70a0 100644 --- a/design-pattern/src/main/java/creational/FactoryMethodPattern.java +++ b/design-pattern/src/main/java/creational/FactoryMethodPattern.java @@ -1,7 +1,7 @@ package creational; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. *

* 工厂方法模式 */ diff --git a/design-pattern/src/main/java/creational/PrototypePattern.java b/design-pattern/src/main/java/creational/PrototypePattern.java index 33e1fd4..901cb8c 100644 --- a/design-pattern/src/main/java/creational/PrototypePattern.java +++ b/design-pattern/src/main/java/creational/PrototypePattern.java @@ -1,7 +1,7 @@ package creational; /** - * Created by 李恒名 on 2017/7/16. + * Created by on 2017/7/16. *

* 原型模式,即通过一个实例的原型来复制(克隆)出类似的实例,而不是去重新创建,这有 * 点像克隆人。如果你使用过 Javascript ,你应该对 Prototype 很熟悉。 diff --git a/design-pattern/src/main/java/creational/SimpleFactoryPattern.java b/design-pattern/src/main/java/creational/SimpleFactoryPattern.java index 3ae9457..dc67aee 100644 --- a/design-pattern/src/main/java/creational/SimpleFactoryPattern.java +++ b/design-pattern/src/main/java/creational/SimpleFactoryPattern.java @@ -1,7 +1,7 @@ package creational; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. *

* 简单工厂模式,简单来说就是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(该模式并不属于GOF 23) */ diff --git a/design-pattern/src/main/java/creational/SingletonPattern.java b/design-pattern/src/main/java/creational/SingletonPattern.java index f73fec5..f4956d4 100644 --- a/design-pattern/src/main/java/creational/SingletonPattern.java +++ b/design-pattern/src/main/java/creational/SingletonPattern.java @@ -5,7 +5,7 @@ import java.util.Objects; /** - * Created by 李恒名 on 2017/7/15. + * Created by on 2017/7/15. *

* 单例模式,即一个类只允许存在一个实例。 * diff --git a/design-pattern/src/main/java/creational/StaticFactoryMethodPattern.java b/design-pattern/src/main/java/creational/StaticFactoryMethodPattern.java index 7045354..41b2443 100644 --- a/design-pattern/src/main/java/creational/StaticFactoryMethodPattern.java +++ b/design-pattern/src/main/java/creational/StaticFactoryMethodPattern.java @@ -1,7 +1,7 @@ package creational; /** - * Created by 李恒名 on 2017/6/14. + * Created by on 2017/6/14. *

* 静态工厂方法模式,准确来讲这并不是一种设计模式,只是为了简化创建对象的过程。 * 这种创建对象形式很常见,比如 Guava 中的 Lists 、Maps 等。 diff --git a/design-pattern/src/main/java/structural/AdapterPattern.java b/design-pattern/src/main/java/structural/AdapterPattern.java index f6db536..1675968 100644 --- a/design-pattern/src/main/java/structural/AdapterPattern.java +++ b/design-pattern/src/main/java/structural/AdapterPattern.java @@ -3,7 +3,7 @@ import org.junit.Test; /** - * Created by 李恒名 on 2017/7/27. + * Created by on 2017/7/27. *

* 适配器模式,用于将一个类的接口转换成客户端所期待的另一种接口。 */ diff --git a/design-pattern/src/main/java/structural/BridgePattern.java b/design-pattern/src/main/java/structural/BridgePattern.java index 510baf9..c0690f7 100644 --- a/design-pattern/src/main/java/structural/BridgePattern.java +++ b/design-pattern/src/main/java/structural/BridgePattern.java @@ -1,7 +1,7 @@ package structural; /** - * Created by 李恒名 on 2017/10/06. + * Created by on 2017/10/06. * * 桥接模式的意图是将抽象类与抽象方法的实现相互分离来实现解耦,以便二者可以相互独立地变化。 * diff --git a/design-pattern/src/main/java/structural/DecoratorPattern.java b/design-pattern/src/main/java/structural/DecoratorPattern.java index 4d5d9f8..5e5de98 100644 --- a/design-pattern/src/main/java/structural/DecoratorPattern.java +++ b/design-pattern/src/main/java/structural/DecoratorPattern.java @@ -1,7 +1,7 @@ package structural; /** - * Created by 李恒名 on 2017/7/27. + * Created by on 2017/7/27. *

* 装饰者模式 * diff --git a/design-pattern/src/main/java/structural/FacadePattern.java b/design-pattern/src/main/java/structural/FacadePattern.java index f491855..8d799fb 100644 --- a/design-pattern/src/main/java/structural/FacadePattern.java +++ b/design-pattern/src/main/java/structural/FacadePattern.java @@ -1,7 +1,7 @@ package structural; /** - * Created by 李恒名 on 2017/7/17. + * Created by on 2017/7/17. *

* 外观模式,也称门面模式,用于为一个复杂的系统提供一个统一、简单的访问入口 */ diff --git a/design-pattern/src/main/java/structural/ProxyPattern.java b/design-pattern/src/main/java/structural/ProxyPattern.java index 6079a82..43fda5a 100644 --- a/design-pattern/src/main/java/structural/ProxyPattern.java +++ b/design-pattern/src/main/java/structural/ProxyPattern.java @@ -5,7 +5,7 @@ import java.util.List; /** - * Created by 李恒名 on 2017/7/19. + * Created by on 2017/7/19. *

* 代理模式,为目标对象创建一个代理对象,其他对象可以通过代理对象来访问目标对象的方法,AOP、拦截器均为该模式的实践。 * diff --git a/io/pom.xml b/io/pom.xml index e7b3af7..b6a8502 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/io/src/main/java/ReadFile.java b/io/src/main/java/ReadFile.java index afe81a1..ba2e9fe 100644 --- a/io/src/main/java/ReadFile.java +++ b/io/src/main/java/ReadFile.java @@ -6,7 +6,7 @@ import java.util.List; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class ReadFile { diff --git a/jvm/pom.xml b/jvm/pom.xml index 4692c84..2e77a4a 100644 --- a/jvm/pom.xml +++ b/jvm/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/jvm/src/main/java/Test.java b/jvm/src/main/java/Test.java index 4c7f9be..227c77e 100644 --- a/jvm/src/main/java/Test.java +++ b/jvm/src/main/java/Test.java @@ -1,5 +1,5 @@ /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class Test { public void say() { diff --git a/jvm/src/main/java/classloader/CustomClassLoader.java b/jvm/src/main/java/classloader/CustomClassLoader.java index b9a0069..889d31d 100644 --- a/jvm/src/main/java/classloader/CustomClassLoader.java +++ b/jvm/src/main/java/classloader/CustomClassLoader.java @@ -42,10 +42,14 @@ protected Class findClass(String name) throws ClassNotFoundException { public static void main(String[] args) throws ReflectiveOperationException{ //1. 将Test.java 编译为Test.class 后复制到 E:\classes 下,当然也可以选择其他目录作为类加载器的classpath。 //2. 加载 - ClassLoader classLoader = new CustomClassLoader("E:\\classes\\"); + //ClassLoader classLoader = new CustomClassLoader("E:\\classes\\"); + ClassLoader classLoader = new CustomClassLoader("/Users/spring/classes"); Class clazz = classLoader.loadClass("Test");//如果你的Test在一个包内,需要加上包名,如x.y.z.Test //3. 通过反射调用say()方法 + System.out.println(classLoader.getClass().getName()); + System.out.println(classLoader.getClass().getClassLoader()); Object instance = clazz.newInstance(); + System.out.println(instance.getClass().getClassLoader());///??? Method method = clazz.getMethod("say", null); method.invoke(instance);//Hello } diff --git a/pom.xml b/pom.xml index 5bad714..adda08f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.github.lihengming + com.github.spring java-codes pom 1.0-SNAPSHOT diff --git a/socket/pom.xml b/socket/pom.xml index 5a9cf57..632cf0e 100644 --- a/socket/pom.xml +++ b/socket/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> java-codes - com.github.lihengming + com.github.spring 1.0-SNAPSHOT 4.0.0 diff --git a/socket/src/main/java/echo/Client.java b/socket/src/main/java/echo/Client.java index bf12202..6dddadf 100644 --- a/socket/src/main/java/echo/Client.java +++ b/socket/src/main/java/echo/Client.java @@ -7,7 +7,7 @@ import java.util.Scanner; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. */ public class Client { diff --git a/socket/src/main/java/echo/EchoServer.java b/socket/src/main/java/echo/EchoServer.java index f6e2172..64dd075 100644 --- a/socket/src/main/java/echo/EchoServer.java +++ b/socket/src/main/java/echo/EchoServer.java @@ -7,7 +7,7 @@ import java.net.Socket; /** - * Created by 李恒名 on 2017/6/8. + * Created by on 2017/6/8. * * 一个Socket入门小例子,将客户端的输入返回给客户端,支持多客户端连接。 */ diff --git a/socket/src/main/java/netty/HelloClient.java b/socket/src/main/java/netty/HelloClient.java index b722900..47fec45 100644 --- a/socket/src/main/java/netty/HelloClient.java +++ b/socket/src/main/java/netty/HelloClient.java @@ -8,7 +8,7 @@ import java.util.concurrent.Executors; /** - * Created by 李恒名 on 2017/8/8. + * Created by on 2017/8/8. */ public class HelloClient { public static void main(String args[]) { diff --git a/socket/src/main/java/netty/NettyTest.java b/socket/src/main/java/netty/NettyTest.java index f48e423..2b08232 100644 --- a/socket/src/main/java/netty/NettyTest.java +++ b/socket/src/main/java/netty/NettyTest.java @@ -9,7 +9,7 @@ import java.util.concurrent.Executors; /** - * Created by 李恒名 on 2017/8/8. + * Created by on 2017/8/8. */ public class NettyTest { public static void main(String[] args) { diff --git a/socket/src/main/java/rpc/RpcTest.java b/socket/src/main/java/rpc/RpcTest.java index ef46e0a..69fdda0 100644 --- a/socket/src/main/java/rpc/RpcTest.java +++ b/socket/src/main/java/rpc/RpcTest.java @@ -6,7 +6,7 @@ import static rpc.SimpleRpcFramework.use; /** - * Created by 李恒名 on 2017/8/17. + * Created by on 2017/8/17. */ public class RpcTest { private static final String HOST = "localhost"; diff --git a/socket/src/main/java/rpc/SimpleRpcFramework.java b/socket/src/main/java/rpc/SimpleRpcFramework.java index dd90d16..268b65d 100644 --- a/socket/src/main/java/rpc/SimpleRpcFramework.java +++ b/socket/src/main/java/rpc/SimpleRpcFramework.java @@ -8,7 +8,7 @@ import java.net.Socket; /** - * Created by 李恒名 on 2017/8/17. + * Created by on 2017/8/17. */ public class SimpleRpcFramework { From 937f1082a56a847c2bc50879aefb5d7c267434ac Mon Sep 17 00:00:00 2001 From: lou Date: Tue, 24 Jul 2018 11:22:08 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- concurrent/src/main/java/juc/CountDownLatchTest.java | 3 +++ concurrent/src/main/java/juc/CyclicBarrierTest.java | 4 +++- concurrent/src/main/java/juc/ExecutorTest.java | 6 ++++-- concurrent/src/main/java/juc/ThreadPoolExecutorTest.java | 9 ++++++--- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/concurrent/src/main/java/juc/CountDownLatchTest.java b/concurrent/src/main/java/juc/CountDownLatchTest.java index 4b89a27..d2a7dcc 100644 --- a/concurrent/src/main/java/juc/CountDownLatchTest.java +++ b/concurrent/src/main/java/juc/CountDownLatchTest.java @@ -9,6 +9,9 @@ public class CountDownLatchTest { static CountDownLatch latch = new CountDownLatch(3);//创建计数器并设置初始值为3 static void work() { + System.out.println(Thread.currentThread().getName() + " Work Start"); + try{Thread.sleep(3000);} + catch(Exception e){e.printStackTrace();} System.out.println(Thread.currentThread().getName() + " Work End"); latch.countDown();//计数器值-1 } diff --git a/concurrent/src/main/java/juc/CyclicBarrierTest.java b/concurrent/src/main/java/juc/CyclicBarrierTest.java index 38cfeb1..03b86f5 100644 --- a/concurrent/src/main/java/juc/CyclicBarrierTest.java +++ b/concurrent/src/main/java/juc/CyclicBarrierTest.java @@ -8,7 +8,7 @@ */ public class CyclicBarrierTest { //定义一个barrier并设置parties,当线程数达到parties后,barrier失效,线程可以继续运行,在未达到parties值之前,线程将持续等待。 - static CyclicBarrier barrier = new CyclicBarrier(3,()-> System.out.println("栅栏:“这么多猪,我恐怕扛不住了”")); + static CyclicBarrier barrier = new CyclicBarrier(3,()-> System.out.println("小猪[" + Thread.currentThread().getName() + "]:“猪多力量大,栅栏恐怕扛不住了,哇卡卡”")); static void go() { System.out.println("小猪[" + Thread.currentThread().getName() + "] 在栅栏边等待其他小猪"); @@ -26,6 +26,8 @@ public static void main(String[] args) { new Thread(() -> go()).start(); new Thread(() -> go()).start(); + try{Thread.sleep(3000);} + catch(Exception e){e.printStackTrace();} new Thread(() -> go()).start(); /** diff --git a/concurrent/src/main/java/juc/ExecutorTest.java b/concurrent/src/main/java/juc/ExecutorTest.java index 106b3fd..8cf3859 100644 --- a/concurrent/src/main/java/juc/ExecutorTest.java +++ b/concurrent/src/main/java/juc/ExecutorTest.java @@ -8,14 +8,16 @@ public class ExecutorTest { public static void main(String[] args) { //创建固定线程数的线程池 - ExecutorService es = Executors.newFixedThreadPool(2); + ExecutorService es = Executors.newFixedThreadPool(2);//// //执行传统Runnable任务 es.execute(new RunnableTask()); //执行Callable任务并获得任务结果Future + System.out.println("put time:" + System.currentTimeMillis()); Future future = es.submit(new CallableTask()); try { + System.out.println("get time:" + System.currentTimeMillis()); System.out.println("Calculate Completed Sum:" + future.get()); - } catch (InterruptedException | ExecutionException e) { + } catch (InterruptedException | ExecutionException e) {// e.printStackTrace(); } //关键线程池 diff --git a/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java b/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java index 6c45c75..b1a5e15 100644 --- a/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java +++ b/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java @@ -12,7 +12,7 @@ public class ThreadPoolExecutorTest { public static void main(String[] args) { BlockingQueue workQueue = new LinkedBlockingQueue<>(5);//工作队列容量5 int corePoolSize = 1;//核心线程数1 - int maximumPoolSize = 2;//最大线程数2 + int maximumPoolSize = 3;//最大线程数2 ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 1, TimeUnit.MILLISECONDS, workQueue); executor.execute(new TestTask());//执行任务,创建一个核心线程 @@ -25,8 +25,10 @@ public static void main(String[] args) { System.out.println("WorkQueue Size:" + workQueue.size());//WorkQueue Size:5,队列满 executor.execute(new TestTask());//核心线程忙,队列也满了,继续新的线程执行任务 - System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:2,达到最大线程数 + System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:2. + executor.execute(new TestTask());//核心线程忙,队列也满了,继续新的线程执行任务 + System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:3,达到最大线程数 executor.execute(new TestTask());//继续执行任务,则抛出异常,拒绝服务 executor.shutdown(); @@ -48,7 +50,8 @@ class TestTask implements Runnable{ @Override public void run() { try { - TimeUnit.DAYS.sleep(1); + //TimeUnit.DAYS.sleep(1); + Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } From d9743ab20c7c5aec014211e9b56022f878a87d1a Mon Sep 17 00:00:00 2001 From: lou Date: Tue, 24 Jul 2018 11:43:58 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/juc/ThreadPoolExecutorTest.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java b/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java index b1a5e15..2d31811 100644 --- a/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java +++ b/concurrent/src/main/java/juc/ThreadPoolExecutorTest.java @@ -11,20 +11,27 @@ public class ThreadPoolExecutorTest { public static void main(String[] args) { BlockingQueue workQueue = new LinkedBlockingQueue<>(5);//工作队列容量5 - int corePoolSize = 1;//核心线程数1 + int corePoolSize = 2;//核心线程数1 int maximumPoolSize = 3;//最大线程数2 ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 1, TimeUnit.MILLISECONDS, workQueue); - + System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:0. executor.execute(new TestTask());//执行任务,创建一个核心线程 + System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:1. + executor.execute(new TestTask());//核心线程忙,放入队列,队列内任务数+1 + System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:2. executor.execute(new TestTask());//核心线程忙,放入队列,队列内任务数+1 + System.out.println("WorkQueue Size:" + workQueue.size());//WorkQueue Size:1,队列满 + System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:2. executor.execute(new TestTask());//核心线程忙,放入队列,队列内任务数+1 executor.execute(new TestTask());//核心线程忙,放入队列,队列内任务数+1 executor.execute(new TestTask());//核心线程忙,放入队列,队列内任务数+1 + System.out.println("WorkQueue Size:" + workQueue.size());//WorkQueue Size:4,队列未满 + System.out.println("---PoolSize Size:" + executor.getPoolSize());//PoolSize Size:2. + + executor.execute(new TestTask());//核心线程忙,放入队列,队列内任务数+1 System.out.println("WorkQueue Size:" + workQueue.size());//WorkQueue Size:5,队列满 - - executor.execute(new TestTask());//核心线程忙,队列也满了,继续新的线程执行任务 System.out.println("PoolSize Size:" + executor.getPoolSize());//PoolSize Size:2. executor.execute(new TestTask());//核心线程忙,队列也满了,继续新的线程执行任务 From d896e258adac736d3a8257bbfcf9b5243854c5aa Mon Sep 17 00:00:00 2001 From: lou Date: Tue, 24 Jul 2018 12:02:59 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=80=85=20=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=E8=80=85=20=E5=90=8C=E6=AD=A5=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcmodel/ProducerConsumerModelBlockQueueImpl.java | 6 ++++-- .../pcmodel/ProducerConsumerModelWaitNotifyImpl.java | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java b/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java index 6145724..a0bbe4c 100644 --- a/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java +++ b/concurrent/src/main/java/pcmodel/ProducerConsumerModelBlockQueueImpl.java @@ -67,7 +67,8 @@ public void run() { while (true) { Product product = new Product("MAC"); try { - buffer.put(product); + buffer.put(product);// + System.out.println("生产者[" + Thread.currentThread().getName() + "]--------产品:" + buffer.size()); System.out.println("生产者[" + Thread.currentThread().getName() + "]生产了一个产品:" + product); } catch (InterruptedException e) { e.printStackTrace(); @@ -87,7 +88,8 @@ public Consumer(BlockingQueue buffer) { public void run() { while (true) { try { - System.out.println("消费者[" + Thread.currentThread().getName() + "]消费了一个产品:" + buffer.take()); + System.out.println("消费者[" + Thread.currentThread().getName() + "]--------产品:" + buffer.size());// + System.out.println("消费者[" + Thread.currentThread().getName() + "]消费了一个产品:" + buffer.take());// } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java b/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java index 5ceba11..bcabaea 100644 --- a/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java +++ b/concurrent/src/main/java/pcmodel/ProducerConsumerModelWaitNotifyImpl.java @@ -18,7 +18,7 @@ public static void main(String[] args) { es.execute(new Producer(buffer)); es.execute(new Producer(buffer)); //三个消费者 - Consumer consumer = new Consumer(buffer); +// Consumer consumer = new Consumer(buffer); es.execute(new Consumer(buffer)); es.execute(new Consumer(buffer)); es.execute(new Consumer(buffer)); @@ -69,7 +69,7 @@ public Producer(List buffer) { public void run() { while (true) { - synchronized (buffer) { + synchronized (buffer) {///基本上10 个 10个的生产和消费。去掉同步 报错。。。。 while (buffer.size() >= maxSize) { try { buffer.wait();//将当前线程放入等锁(buffer对象的锁)池,并释放锁。 @@ -86,7 +86,7 @@ public void run() { Product product = new Product("iPhone 手机"); buffer.add(product); System.out.println("生产者[" + Thread.currentThread().getName() + "]生产了一个产品:" + product); - buffer.notifyAll();//生产完毕通知等待池内的其他线程(生产者或消费者都有可能) + buffer.notifyAll();//生产完毕通知等待池内的其他线程(生产者或消费者都有可能)// } } } @@ -105,13 +105,13 @@ public void run() { synchronized (buffer) { while (buffer.isEmpty()) { try { - buffer.wait(); + buffer.wait();// } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("消费者[" + Thread.currentThread().getName() + "]消费了一个产品:" + buffer.remove(0)); - buffer.notifyAll();//消费完毕通知等待池内的其他线程(生产者或消费者都有可能) + buffer.notifyAll();//消费完毕通知等待池内的其他线程(生产者或消费者都有可能)// } } } From fbebcda5c26206da361698045cbc9296e1e33e79 Mon Sep 17 00:00:00 2001 From: lou Date: Wed, 25 Jul 2018 09:24:40 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/thread/HowToCreateThread.java | 4 ++-- concurrent/src/main/java/thread/InterruptTest.java | 2 +- concurrent/src/main/java/thread/JoinTest.java | 13 ++++++++++--- concurrent/src/main/java/thread/NotifyTest.java | 6 ++++-- concurrent/src/main/java/thread/TimedJoinTest.java | 1 + concurrent/src/main/java/thread/WaitTest.java | 2 ++ concurrent/src/main/java/thread/YieldTest.java | 5 +++++ 7 files changed, 25 insertions(+), 8 deletions(-) diff --git a/concurrent/src/main/java/thread/HowToCreateThread.java b/concurrent/src/main/java/thread/HowToCreateThread.java index 0bf796a..2bd7e12 100644 --- a/concurrent/src/main/java/thread/HowToCreateThread.java +++ b/concurrent/src/main/java/thread/HowToCreateThread.java @@ -41,7 +41,7 @@ public void run() { public static void method3() { //实现 java.util.concurrent.Callable - class Task implements Callable { + class Task implements Callable {//线程组。。 @Override public Object call() throws Exception { @@ -51,7 +51,7 @@ public Object call() throws Exception { } } - ExecutorService es = Executors.newFixedThreadPool(1); + ExecutorService es = Executors.newFixedThreadPool(1);//sigle 与 单线程的区别。 Future future = es.submit(new Task()); try { System.out.println("Calculate Completed Sum:" + future.get()); diff --git a/concurrent/src/main/java/thread/InterruptTest.java b/concurrent/src/main/java/thread/InterruptTest.java index b05ecb3..7760d62 100644 --- a/concurrent/src/main/java/thread/InterruptTest.java +++ b/concurrent/src/main/java/thread/InterruptTest.java @@ -14,7 +14,7 @@ public static void main(String[] args) throws InterruptedException { thread.start(); //中断该线程 - thread.interrupt(); +// thread.interrupt();//没什么效果? } } diff --git a/concurrent/src/main/java/thread/JoinTest.java b/concurrent/src/main/java/thread/JoinTest.java index 20e1732..1c1aa19 100644 --- a/concurrent/src/main/java/thread/JoinTest.java +++ b/concurrent/src/main/java/thread/JoinTest.java @@ -1,18 +1,25 @@ package thread; +import java.util.concurrent.TimeUnit; + /** * Created by on 2017/6/16. */ public class JoinTest { public static void main(String[] args) throws InterruptedException { - Thread thread1 = new Thread(() -> System.out.println(Thread.currentThread().getName() + " Work End")); + Thread thread1 = new Thread(() -> System.out.println(Thread.currentThread().getName() + " Work End 0")); thread1.start(); thread1.join();//合并到主线程,主线程将等待该子线程执行完毕才会执行 - Thread thread2 = new Thread(() -> System.out.println(Thread.currentThread().getName() + " Work End")); + Thread thread2 = new Thread(() -> { + System.out.println(Thread.currentThread().getName() + " Work End 1"); + try {Thread.sleep(1000);} + catch (InterruptedException e) {}} + ); thread2.start(); - thread1.join();//合并到主线程,主线程将等待该子线程执行完毕才会执行 +// thread1.join();//合并到主线程,主线程将等待该子线程执行完毕才会执行 + thread2.join();//合并到主线程,主线程将等待该子线程执行完毕才会执行 System.out.println("Main Thread Work End"); diff --git a/concurrent/src/main/java/thread/NotifyTest.java b/concurrent/src/main/java/thread/NotifyTest.java index 1efa40d..7c0a522 100644 --- a/concurrent/src/main/java/thread/NotifyTest.java +++ b/concurrent/src/main/java/thread/NotifyTest.java @@ -5,8 +5,9 @@ */ public class NotifyTest { - public synchronized void work() { + public synchronized void work() {//synchronized System.out.println("Begin Work"); + System.out.println("Begin time"+System.currentTimeMillis()); try { //等待唤醒 wait(); @@ -14,6 +15,7 @@ public synchronized void work() { e.printStackTrace(); } System.out.println("Work End"); + System.out.println("End time"+System.currentTimeMillis()); } public synchronized void continueWork() { @@ -26,6 +28,6 @@ public static void main(String[] args) throws InterruptedException { //等待3000毫秒后唤醒,继续工作。 Thread.sleep(3000); - test.continueWork(); +// test.continueWork();//注释调则 一直不唤醒。 } } diff --git a/concurrent/src/main/java/thread/TimedJoinTest.java b/concurrent/src/main/java/thread/TimedJoinTest.java index fa77dc1..72e017a 100644 --- a/concurrent/src/main/java/thread/TimedJoinTest.java +++ b/concurrent/src/main/java/thread/TimedJoinTest.java @@ -17,6 +17,7 @@ public static void main(String[] args) throws InterruptedException { }); thread.start(); thread.join(100);//合并到主线程,主线程将等待该子线程执行完毕才会执行,只等待100毫秒,过时不在等。 +// thread.join();//合并到主线程,主线程将等待该子线程执行完毕才会执行,主线程一直等。 System.out.println("Main Thread Work End"); diff --git a/concurrent/src/main/java/thread/WaitTest.java b/concurrent/src/main/java/thread/WaitTest.java index 3d84646..4c0eaa0 100644 --- a/concurrent/src/main/java/thread/WaitTest.java +++ b/concurrent/src/main/java/thread/WaitTest.java @@ -7,12 +7,14 @@ public class WaitTest { public synchronized void work() { System.out.println("Begin Work"); + System.out.println("Begin time"+System.currentTimeMillis()); try { //等待1000毫秒后,自动唤醒继续执行 wait(1000); } catch (InterruptedException e) { e.printStackTrace(); } + System.out.println("End time"+System.currentTimeMillis()); System.out.println("Work End"); } diff --git a/concurrent/src/main/java/thread/YieldTest.java b/concurrent/src/main/java/thread/YieldTest.java index 755656c..397a733 100644 --- a/concurrent/src/main/java/thread/YieldTest.java +++ b/concurrent/src/main/java/thread/YieldTest.java @@ -8,6 +8,10 @@ public class YieldTest { public void work(){ for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName() + " Working"); + try{Thread.sleep(1000);} + catch(Exception e){ + e.printStackTrace(); + } Thread.yield(); } } @@ -17,6 +21,7 @@ public static void main(String[] args) { YieldTest test = new YieldTest(); new Thread(() -> test.work()).start(); new Thread(() -> test.work()).start(); + System.out.println(Thread.currentThread().getName() + " Working"); /** 输出: From cd99cf0cc381035300e5dca24052b80c2e4075ca Mon Sep 17 00:00:00 2001 From: lou Date: Wed, 25 Jul 2018 10:29:20 +0800 Subject: [PATCH 6/7] volatile test --- concurrent/src/main/java/volatiles/VolatileTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/concurrent/src/main/java/volatiles/VolatileTest.java b/concurrent/src/main/java/volatiles/VolatileTest.java index 1fb17d1..059436f 100644 --- a/concurrent/src/main/java/volatiles/VolatileTest.java +++ b/concurrent/src/main/java/volatiles/VolatileTest.java @@ -5,7 +5,7 @@ */ public class VolatileTest { - private /*volatile*/ int sharedValue = 0; + private volatile int sharedValue = 0;/////volatile public static void main(String[] args) throws InterruptedException { VolatileTest test = new VolatileTest(); @@ -37,8 +37,9 @@ public void listener() { int localValue = sharedValue; while (sharedValue < 5) { if (localValue != sharedValue) { - System.out.println("Value Changed:" + sharedValue); + System.out.println("localValue Value before Change :" + localValue); localValue = sharedValue; + System.out.println("localValue Value after Changed..:" + sharedValue); } } } From 009163d1d6fec8597c996265bf9d306c3d0a062b Mon Sep 17 00:00:00 2001 From: lou Date: Thu, 26 Jul 2018 09:23:37 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=8D=95=E4=BE=8B=E6=A8=A1=E5=BC=8F=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/volatiles/DBConnection.java | 5 ++ .../main/java/volatiles/DataSourceEnum.java | 12 +++++ .../src/main/java/volatiles/EHSSingleton.java | 22 +++++++++ .../main/java/volatiles/EHSSingletonTest.java | 19 +++++++ .../src/main/java/volatiles/Singleton.java | 25 +++++++--- .../main/java/volatiles/SingletonLazy.java | 23 +++++++++ .../main/java/volatiles/SingletonTest.java | 49 +++++++++++++++++++ 7 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 concurrent/src/main/java/volatiles/DBConnection.java create mode 100644 concurrent/src/main/java/volatiles/DataSourceEnum.java create mode 100644 concurrent/src/main/java/volatiles/EHSSingleton.java create mode 100644 concurrent/src/main/java/volatiles/EHSSingletonTest.java create mode 100644 concurrent/src/main/java/volatiles/SingletonLazy.java create mode 100644 concurrent/src/main/java/volatiles/SingletonTest.java diff --git a/concurrent/src/main/java/volatiles/DBConnection.java b/concurrent/src/main/java/volatiles/DBConnection.java new file mode 100644 index 0000000..5c80106 --- /dev/null +++ b/concurrent/src/main/java/volatiles/DBConnection.java @@ -0,0 +1,5 @@ +package volatiles; + +public class DBConnection { + //https://blog.csdn.net/gavin_dyson/article/details/70832185 +} diff --git a/concurrent/src/main/java/volatiles/DataSourceEnum.java b/concurrent/src/main/java/volatiles/DataSourceEnum.java new file mode 100644 index 0000000..2cc4bfd --- /dev/null +++ b/concurrent/src/main/java/volatiles/DataSourceEnum.java @@ -0,0 +1,12 @@ +package volatiles; + +public enum DataSourceEnum { + DATASOURCE; + private DBConnection connection = null; + private DataSourceEnum() { + connection = new DBConnection(); + } + public DBConnection getConnection() { + return connection; + } +} diff --git a/concurrent/src/main/java/volatiles/EHSSingleton.java b/concurrent/src/main/java/volatiles/EHSSingleton.java new file mode 100644 index 0000000..fe2fe7d --- /dev/null +++ b/concurrent/src/main/java/volatiles/EHSSingleton.java @@ -0,0 +1,22 @@ +package volatiles; + +public class EHSSingleton { + + // 1.将构造函数私有化,不可以通过new的方式来创建对象 + private EHSSingleton(){} + + // 2.在类的内部创建自行实例 + private static EHSSingleton instance = new EHSSingleton();///俄汉式 没有并发问题。 + + // 3.提供获取唯一实例的方法 + public static EHSSingleton getInstance() { + return instance; + } +} + //一上来就创建对象了,如果该实例从始至终都没被使用过,则会造成内存浪费。 + //链接:https://www.jianshu.com/p/debb798ca9ef + // + //编写单例模式的代码其实很简单,就分了三步: + //将构造函数私有化 + //在类的内部创建实例 + //提供获取唯一实例的方法 \ No newline at end of file diff --git a/concurrent/src/main/java/volatiles/EHSSingletonTest.java b/concurrent/src/main/java/volatiles/EHSSingletonTest.java new file mode 100644 index 0000000..3c3c229 --- /dev/null +++ b/concurrent/src/main/java/volatiles/EHSSingletonTest.java @@ -0,0 +1,19 @@ +package volatiles; + +public class EHSSingletonTest { + + + public static void main(String[] args) { + + for (int i = 0; i < 2000; i++) { + new Thread(() -> { + EHSSingleton instance = EHSSingleton.getInstance(); + System.out.println(instance); + }).start(); + } + + + } + + //链接:https://www.jianshu.com/p/debb798ca9ef +} diff --git a/concurrent/src/main/java/volatiles/Singleton.java b/concurrent/src/main/java/volatiles/Singleton.java index f5f4e46..52c5a2b 100644 --- a/concurrent/src/main/java/volatiles/Singleton.java +++ b/concurrent/src/main/java/volatiles/Singleton.java @@ -4,16 +4,16 @@ * Created by on 2017/6/15. */ public class Singleton { - private volatile static Singleton instance; + private static Singleton instance;//volatile 此处是防止指令重排?没测试出来?懒汉式 private Singleton() { new AssertionError("don't support reflect.");// } public static Singleton getInstance() { - if (instance == null) { // Single Checked - synchronized (Singleton.class) { - if (instance == null) { // Double checked + if (instance == null) { // Single Checked///提高性能 + synchronized (Singleton.class) {///注释掉 有多线程问题。 + if (instance == null) { // Double checked ///注释掉 有多线程问题。 instance = new Singleton(); } } @@ -22,8 +22,21 @@ public static Singleton getInstance() { } public static void main(String[] args) { - - } + for (int i = 0; i <1000 ; i++) { + new Thread(()->{ + try{ Thread.sleep(1000);} + catch(Exception e){ + e.printStackTrace(); + } + System.out.println(Singleton.getInstance().toString()); + }).start(); + } + } +// System.out.println(Singleton.getInstance().toString()); +// System.out.println(Singleton.getInstance().toString()); +// System.out.println(Singleton.getInstance().toString()); +// System.out.println(Singleton.getInstance().toString()); +// System.out.println(Singleton.getInstance().toString()); } diff --git a/concurrent/src/main/java/volatiles/SingletonLazy.java b/concurrent/src/main/java/volatiles/SingletonLazy.java new file mode 100644 index 0000000..bba2ffa --- /dev/null +++ b/concurrent/src/main/java/volatiles/SingletonLazy.java @@ -0,0 +1,23 @@ +package volatiles; + + +public class SingletonLazy { + + private SingletonLazy() { + } + + // 使用内部类的方式来实现懒加载 + private static class LazyHolder {///只有静态内部类 才可以有 静态成员变量。 + // 创建单例对象 + private static final SingletonLazy INSTANCE = new SingletonLazy(); + } + + // 获取对象 + public static final SingletonLazy getInstance() { + return LazyHolder.INSTANCE; + } + +} + + //链接:https://www.jianshu.com/p/debb798ca9ef + diff --git a/concurrent/src/main/java/volatiles/SingletonTest.java b/concurrent/src/main/java/volatiles/SingletonTest.java new file mode 100644 index 0000000..308eba9 --- /dev/null +++ b/concurrent/src/main/java/volatiles/SingletonTest.java @@ -0,0 +1,49 @@ +package volatiles; + +public class SingletonTest { + public static void main(String[] args) { + /*for (int i = 0; i <200 ; i++) { + new Thread(()->{ + try{ Thread.sleep(1000);} + catch(Exception e){ + e.printStackTrace(); + } + System.out.println(Singleton.getInstance().toString()); + }).start(); + }*/ + /* + for (int i = 0; i <2000 ; i++) { + new Thread(()->{ + try{ Thread.sleep(1000);} + catch(Exception e){ + e.printStackTrace(); + } + System.out.println(SingleEnum.INSTANCE.hashCode()); + }).start(); + } + */ + + /* + for (int i = 0; i <2000 ; i++) { + new Thread(()->{ + try{ Thread.sleep(1000);} + catch(Exception e){ + e.printStackTrace(); + } + System.out.println(SingletonLazy.getInstance().toString()); + }).start();//懒加载 + } + */ + for (int i = 0; i <2000 ; i++) { + new Thread(()->{ + try{ Thread.sleep(1000);} + catch(Exception e){ + e.printStackTrace(); + } + DBConnection con1 = DataSourceEnum.DATASOURCE.getConnection(); + DBConnection con2 = DataSourceEnum.DATASOURCE.getConnection(); + System.out.println(con1 == con2); + }).start();//枚举形式 + } + } +}