├── .gitignore
├── src
├── main
│ ├── java
│ │ └── com
│ │ │ ├── redis
│ │ │ ├── Test.java
│ │ │ ├── JRedisPoolUtils.java
│ │ │ ├── RedisInvokeTest.java
│ │ │ └── JRedisTest.java
│ │ │ ├── javaCore
│ │ │ ├── proxy
│ │ │ │ ├── _2
│ │ │ │ │ ├── Subject.java
│ │ │ │ │ ├── Client.java
│ │ │ │ │ ├── RealSubject.java
│ │ │ │ │ └── DynamicSubject.java
│ │ │ │ └── _1
│ │ │ │ │ ├── Client.java
│ │ │ │ │ ├── ProxySubject.java
│ │ │ │ │ ├── Subject.java
│ │ │ │ │ └── RealSubject.java
│ │ │ ├── java_thread
│ │ │ │ ├── JUC
│ │ │ │ │ ├── concurrentCollection
│ │ │ │ │ │ ├── ConcurrentHashMap
│ │ │ │ │ │ │ └── ConcurrentHashMapTest.java
│ │ │ │ │ │ ├── CopyOnWriteArraySet
│ │ │ │ │ │ │ └── CopyOnWriteArraySetTest.java
│ │ │ │ │ │ └── CopyOnWriteArrayList
│ │ │ │ │ │ │ └── CopyOnWriteArrayListTest.java
│ │ │ │ │ ├── Lock
│ │ │ │ │ │ ├── condition
│ │ │ │ │ │ │ ├── Customer.java
│ │ │ │ │ │ │ ├── Producer.java
│ │ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ │ └── Depot.java
│ │ │ │ │ │ ├── ReentrantLock
│ │ │ │ │ │ │ └── _1
│ │ │ │ │ │ │ │ ├── Job.java
│ │ │ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ │ │ └── PrintQueue.java
│ │ │ │ │ │ ├── ReentrantReadWriteLock
│ │ │ │ │ │ │ ├── Reader.java
│ │ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ │ ├── Writer.java
│ │ │ │ │ │ │ └── PricesInfo.java
│ │ │ │ │ │ └── AQS
│ │ │ │ │ │ │ ├── twinsLock
│ │ │ │ │ │ │ ├── TwinsLockTest.java
│ │ │ │ │ │ │ └── TwinsLock.java
│ │ │ │ │ │ │ └── Mutex.java
│ │ │ │ │ ├── ThreadUtils
│ │ │ │ │ │ ├── CountDownLatch
│ │ │ │ │ │ │ ├── Participater.java
│ │ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ │ └── Conference.java
│ │ │ │ │ │ ├── Semaphore
│ │ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ │ ├── Job.java
│ │ │ │ │ │ │ └── PrintQueue.java
│ │ │ │ │ │ ├── Exchanger
│ │ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ │ ├── Consumer.java
│ │ │ │ │ │ │ └── Producer.java
│ │ │ │ │ │ ├── CyclicBarrier
│ │ │ │ │ │ │ ├── CyclicBarrierTest_1.java
│ │ │ │ │ │ │ └── CyclicBarrierTest_2.java
│ │ │ │ │ │ └── Phaser
│ │ │ │ │ │ │ ├── PhaserTest_1.java
│ │ │ │ │ │ │ ├── PhaserTest_5.java
│ │ │ │ │ │ │ ├── PhaserTest_2.java
│ │ │ │ │ │ │ ├── PhaserTest_4.java
│ │ │ │ │ │ │ ├── PhaserTest_3.java
│ │ │ │ │ │ │ ├── PhaserTest_6.java
│ │ │ │ │ │ │ └── PhaserTest_7.java
│ │ │ │ │ ├── Atomic
│ │ │ │ │ │ ├── AtomicIntegerArrayTest.java
│ │ │ │ │ │ ├── AtomicIntegerTest.java
│ │ │ │ │ │ └── AtomicReferenceTest.java
│ │ │ │ │ └── CAS
│ │ │ │ │ │ └── Counter.java
│ │ │ │ ├── model
│ │ │ │ │ ├── MasterWorker
│ │ │ │ │ │ ├── PlusWorker.java
│ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ ├── Worker.java
│ │ │ │ │ │ └── Master.java
│ │ │ │ │ └── GuardedSuspension
│ │ │ │ │ │ ├── Request.java
│ │ │ │ │ │ ├── Test.java
│ │ │ │ │ │ ├── ServerThread.java
│ │ │ │ │ │ ├── RequestQueue.java
│ │ │ │ │ │ └── ClientThread.java
│ │ │ │ ├── basic
│ │ │ │ │ ├── synchronize
│ │ │ │ │ │ ├── Company.java
│ │ │ │ │ │ ├── Bank.java
│ │ │ │ │ │ └── Account.java
│ │ │ │ │ ├── MultiThread.java
│ │ │ │ │ ├── JoinThread.java
│ │ │ │ │ ├── ShutDownThread.java
│ │ │ │ │ ├── InterruptedThread.java
│ │ │ │ │ ├── ThreadState.java
│ │ │ │ │ └── WaitAndNotify.java
│ │ │ │ └── threadPool
│ │ │ │ │ └── custom
│ │ │ │ │ ├── Test.java
│ │ │ │ │ ├── PThread.java
│ │ │ │ │ └── ThreadPool.java
│ │ │ └── junit
│ │ │ │ └── _1
│ │ │ │ └── Calculator.java
│ │ │ ├── JVM
│ │ │ ├── perm
│ │ │ │ └── PermGengc.java
│ │ │ ├── heap
│ │ │ │ └── HeapGCTest.java
│ │ │ └── stack
│ │ │ │ ├── WordReuseTest.java
│ │ │ │ ├── TestStack.java
│ │ │ │ └── StackGCTest.java
│ │ │ └── NIO
│ │ │ ├── netty
│ │ │ ├── Http
│ │ │ │ └── fileServer
│ │ │ │ │ ├── HttpFileServerHandler.java
│ │ │ │ │ └── HttpFileServer.java
│ │ │ ├── frameDecoder
│ │ │ │ ├── FixedLengthFrameDecoder
│ │ │ │ │ ├── EchoServerHandler.java
│ │ │ │ │ └── EchoServer.java
│ │ │ │ └── DelimiterBasedFrameDecoder
│ │ │ │ │ ├── EchoServerHandler.java
│ │ │ │ │ ├── EchoClientHandler.java
│ │ │ │ │ ├── EchoClient.java
│ │ │ │ │ └── EchoServer.java
│ │ │ ├── base
│ │ │ │ ├── TimerServerHandler.java
│ │ │ │ ├── TimeClientHandler.java
│ │ │ │ ├── TimeClient.java
│ │ │ │ └── TimeServer.java
│ │ │ └── tcpIP
│ │ │ │ ├── stickers
│ │ │ │ ├── TimerServerHandler.java
│ │ │ │ ├── TimeClientHandler.java
│ │ │ │ ├── TimeClient.java
│ │ │ │ └── TimeServer.java
│ │ │ │ └── NotStickers
│ │ │ │ ├── TimerServerHandler.java
│ │ │ │ ├── TimeClientHandler.java
│ │ │ │ ├── TimeClient.java
│ │ │ │ └── TimeServer.java
│ │ │ ├── core
│ │ │ ├── ChannelTest.java
│ │ │ └── BufferTest.java
│ │ │ └── nio
│ │ │ └── _1
│ │ │ ├── TimeClientHandle.java
│ │ │ └── MultiplexerTimerServer.java
│ └── resources
│ │ └── rebel.xml
└── test
│ └── Test.java
└── pom.xml
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | target/
3 |
4 | .idea
5 | *.iml
--------------------------------------------------------------------------------
/src/main/java/com/redis/Test.java:
--------------------------------------------------------------------------------
1 | package com.redis;
2 |
3 | public class Test {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_2/Subject.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._2;
2 |
3 | public interface Subject {
4 | void request();
5 | }
6 |
--------------------------------------------------------------------------------
/src/test/Test.java:
--------------------------------------------------------------------------------
1 | package test;
2 |
3 | import java.util.concurrent.CopyOnWriteArrayList;
4 |
5 | public class Test {
6 |
7 | public static void main(String[] args) {
8 | CopyOnWriteArrayList c = new CopyOnWriteArrayList();
9 | c.get(1);
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_1/Client.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._1;
2 |
3 | public class Client {
4 | public static void main(String[] args) {
5 | RealSubject realSubject = new RealSubject("chenssy");
6 |
7 | ProxySubject proxySubject = new ProxySubject(realSubject);
8 | proxySubject.request();
9 | }
10 | }
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/concurrentCollection/ConcurrentHashMap/ConcurrentHashMapTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.concurrentCollection.ConcurrentHashMap;
2 |
3 | import java.util.concurrent.ConcurrentHashMap;
4 |
5 | public class ConcurrentHashMapTest {
6 | @SuppressWarnings("rawtypes")
7 | private ConcurrentHashMap maps = new ConcurrentHashMap();
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_1/ProxySubject.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._1;
2 |
3 | public class ProxySubject implements Subject{
4 |
5 | private RealSubject realSubject;
6 |
7 | public ProxySubject(RealSubject realSubject){
8 | this.realSubject = realSubject;
9 | }
10 |
11 | @Override
12 | public void request() {
13 | realSubject.request();
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/MasterWorker/PlusWorker.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.MasterWorker;
2 |
3 | /**
4 | * @Author: chenssy
5 | * @Date: 2016/10/26 21:25
6 | */
7 | public class PlusWorker extends Worker {
8 | @Override
9 | public Object handle(Object input) {
10 | Integer i = (Integer) input;
11 | return i * i * i;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/resources/rebel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/condition/Customer.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.condition;
2 |
3 | public class Customer {
4 | private Depot depot;
5 |
6 | public Customer(Depot depot) {
7 | this.depot = depot;
8 | }
9 |
10 | public void consume(final int value) {
11 | new Thread() {
12 | public void run() {
13 | depot.get(value);
14 | }
15 | }.start();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantLock/_1/Job.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantLock._1;
2 |
3 | public class Job implements Runnable{
4 | private PrintQueue printQueue;
5 |
6 | public Job(PrintQueue printQueue){
7 | this.printQueue = printQueue;
8 | }
9 |
10 | @Override
11 | public void run() {
12 | printQueue.printJob(new Object());
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_1/Subject.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._1;
2 |
3 | /**
4 | * �����ɫ��������ʵ����ʹ������Ĺ�ͬ�ӿ�
5 | *
6 | * @Project:JavaCore
7 | * @file:Subject.java
8 | *
9 | * @Author:chenssy
10 | * @email:chenssy995812509@163.com
11 | * @url : http://cmsblogs.com
12 | * @qq : 122448894
13 | *
14 | * @data:2016��1��6��
15 | */
16 | public interface Subject {
17 | void request();
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/JVM/perm/PermGengc.java:
--------------------------------------------------------------------------------
1 | package com.ufclub.ljs.autoInvest.model.AutoInvestSettingcom.JVM.perm;
2 |
3 | /**
4 | * 常量池GC策略:只要常量池中的常量没有被任何地方引用,就可以被回收
5 | * @author chenssy
6 | * @date 2016/11/19
7 | * @since v1.0.0
8 | */
9 | public class PermGengc {
10 |
11 | public static void main(String[] args){
12 | for(int i = 0 ; i < Integer.MAX_VALUE ; i++){
13 | String t = String.valueOf(i).intern();
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/GuardedSuspension/Request.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.GuardedSuspension;
2 |
3 | /**
4 | * @Author: chenssy
5 | * @Date: 2016/10/26 22:13
6 | */
7 | public class Request {
8 | private String name;
9 |
10 | public Request(String name){
11 | this.name = name;
12 | }
13 |
14 | @Override
15 | public String toString() {
16 | return "[Request " + name + "]";
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/CountDownLatch/Participater.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.CountDownLatch;
2 |
3 | public class Participater implements Runnable{
4 | private String name;
5 | private Conference conference;
6 |
7 | public Participater(String name,Conference conference){
8 | this.name = name;
9 | this.conference = conference;
10 | }
11 |
12 | @Override
13 | public void run() {
14 | conference.arrive(name);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/condition/Producer.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.condition;
2 |
3 | public class Producer {
4 | private Depot depot;
5 |
6 | public Producer(Depot depot){
7 | this.depot = depot;
8 | }
9 |
10 | public void produce(final int value){
11 | new Thread(){
12 | public void run(){
13 | depot.put(value);
14 | }
15 | }.start();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Semaphore/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Semaphore;
2 |
3 | public class Test {
4 | public static void main(String[] args) {
5 | Thread[] threads = new Thread[5];
6 |
7 | PrintQueue printQueue = new PrintQueue();
8 |
9 | for(int i = 0 ; i < 5 ; i++){
10 | threads[i] = new Thread(new Job(printQueue),"Thread_" + i);
11 | }
12 |
13 | for(int i = 0 ; i < 5 ; i++){
14 | threads[i].start();
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantLock/_1/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantLock._1;
2 |
3 | public class Test {
4 | public static void main(String[] args) {
5 | PrintQueue printQueue = new PrintQueue();
6 |
7 | Thread thread[] = new Thread[10];
8 | for (int i = 0; i < 10; i++) {
9 | thread[i] = new Thread(new Job(printQueue), "Thread " + i);
10 | }
11 |
12 | for (int i = 0; i < 10; i++) {
13 | thread[i].start();
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/condition/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.condition;
2 |
3 | public class Test {
4 | public static void main(String[] args) {
5 | Depot depot = new Depot();
6 |
7 | Producer producer = new Producer(depot);
8 | Customer customer = new Customer(depot);
9 |
10 | producer.produce(10);
11 | customer.consume(5);
12 | producer.produce(15);
13 | customer.consume(10);
14 | customer.consume(15);
15 | producer.produce(10);
16 | }
17 | }
--------------------------------------------------------------------------------
/src/main/java/com/JVM/heap/HeapGCTest.java:
--------------------------------------------------------------------------------
1 | package com.ufclub.ljs.autoInvest.model.AutoInvestSettingcom.JVM.heap;
2 |
3 | /**
4 | * Java GC测试
5 | * @author chenssy
6 | * @date 2016/11/19
7 | * @since v1.0.0
8 | */
9 | public class HeapGCTest {
10 | //VM参数:-Xms=40 -Xmx40m -Xmn20m
11 | public static void main(String[] args){
12 | byte[] b1 = new byte[1024 * 1024 / 2];
13 | byte[] b2 = new byte[2014 * 1024 * 8];
14 |
15 | b2 = null;
16 | b2 = new byte[2014 * 1024 * 8];
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/JVM/stack/WordReuseTest.java:
--------------------------------------------------------------------------------
1 | package com.JVM.stack;
2 |
3 | /**
4 | * 局部变量对GC的影响;
5 | *
6 | *
7 | * @author chenssy
8 | * @date 2016-11-17
9 | * @since v1.0.0
10 | */
11 | public class WordReuseTest {
12 | public static void test(){
13 | {
14 | byte[] b = new byte[6 * 1024 * 1024];
15 | }
16 | System.gc();
17 | System.out.println("first explict gc over");
18 | }
19 |
20 | public static void main(String[] args){
21 | test();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/basic/synchronize/Company.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.basic.synchronize;
2 |
3 | public class Company implements Runnable{
4 |
5 | private Account account;
6 |
7 | public Company(Account account){
8 | this.account = account;
9 | }
10 |
11 | @Override
12 | public void run() {
13 | for(int i = 0 ; i < 99 ; i++){
14 | account.addAmount(1000);
15 | System.out.println("Company add account : 1000 , the balance : " + account.getBalance() );
16 | }
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/basic/synchronize/Bank.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.basic.synchronize;
2 |
3 | public class Bank implements Runnable{
4 |
5 | private Account account;
6 |
7 | public Bank(Account account){
8 | this.account = account;
9 | }
10 |
11 | @Override
12 | public void run() {
13 | for(int i = 0 ; i < 100 ; i++){
14 | account.SubtractAmount((double)1000);
15 | System.out.println("Company subtract account : 1000 , the balance : " + account.getBalance() );
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/CountDownLatch/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.CountDownLatch;
2 |
3 | public class Test {
4 | public static void main(String[] args) {
5 | //�����������̣߳��ȴ������Ա�μӻ���
6 | Conference conference = new Conference(3);
7 | new Thread(conference).start();
8 |
9 | for(int i = 0 ; i < 3 ; i++){
10 | Participater participater = new Participater("chenssy-0" + i , conference);
11 | Thread thread = new Thread(participater);
12 | thread.start();
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_2/Client.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._2;
2 |
3 | import java.lang.reflect.InvocationHandler;
4 | import java.lang.reflect.Proxy;
5 |
6 | public class Client {
7 | public static void main(String[] args) {
8 | RealSubject realSubject = new RealSubject("chenssy");
9 | InvocationHandler ds = new DynamicSubject(realSubject);
10 |
11 | //���ɴ�����
12 | Subject subject = (Subject) Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),realSubject.getClass().getInterfaces(),ds);
13 | subject.request();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/Http/fileServer/HttpFileServerHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.Http.fileServer;
2 |
3 | import io.netty.channel.ChannelHandlerContext;
4 | import io.netty.channel.SimpleChannelInboundHandler;
5 | import io.netty.handler.codec.http.FullHttpRequest;
6 |
7 | public class HttpFileServerHandler extends SimpleChannelInboundHandler{
8 | public HttpFileServerHandler(String url) {
9 |
10 | }
11 |
12 | @Override
13 | protected void messageReceived(ChannelHandlerContext channelHandlerContext, FullHttpRequest fullHttpRequest) throws Exception {
14 |
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantReadWriteLock/Reader.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantReadWriteLock;
2 |
3 | public class Reader implements Runnable{
4 |
5 | private PricesInfo pricesInfo;
6 |
7 | public Reader(PricesInfo pricesInfo){
8 | this.pricesInfo = pricesInfo;
9 | }
10 |
11 | @Override
12 | public void run() {
13 | for (int i = 0; i < 10; i++) {
14 | System.out.println(Thread.currentThread().getName() + "--Price 1:" + pricesInfo.getPrice1());
15 | System.out.println(Thread.currentThread().getName() + "--Price 1:" + pricesInfo.getPrice2());
16 | }
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/JVM/stack/TestStack.java:
--------------------------------------------------------------------------------
1 | package com.JVM.stack;
2 |
3 | import org.junit.Test;
4 |
5 | /**
6 | * 测试当前栈的深度
7 | *
8 | * @author chenssy
9 | * @date 2016-11-15
10 | * @since v1.0.0
11 | */
12 | public class TestStack {
13 | private int count = 0;
14 |
15 | public void recursion(){
16 | count++;
17 | recursion();
18 | }
19 |
20 | @Test
21 | public void testStack(){
22 | try {
23 | recursion();
24 | } catch (Throwable e) {
25 | System.out.println("Deep of stack is " + count);
26 | e.printStackTrace();
27 | }
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/GuardedSuspension/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.GuardedSuspension;
2 |
3 | /**
4 | * @Author: chenssy
5 | * @Date: 2016/10/26 22:35
6 | */
7 | public class Test {
8 | public static void main(String[] args){
9 | RequestQueue requestQueue = new RequestQueue();
10 |
11 | //开启服务端进程
12 | for(int i = 0 ; i < 10 ; i++){
13 | new ServerThread(requestQueue,"ServerThread_" + i).start();
14 | }
15 |
16 | //开启客户端进程
17 | for(int i = 0 ; i < 10 ; i++){
18 | new ClientThread(requestQueue,"ClientThread_" + i).start();
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_2/RealSubject.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._2;
2 |
3 | /**
4 | *
5 | * ��ʵ��ɫ�������ɫ���������ʵ��������������Ҫ���õĶ���
6 | *
7 | * @Project:JavaCore
8 | * @file:RealSubject.java
9 | *
10 | * @Author:chenssy
11 | * @email:chenssy995812509@163.com
12 | * @url : http://cmsblogs.com
13 | * @qq : 122448894
14 | *
15 | * @data:2016��1��6��
16 | */
17 | public class RealSubject implements Subject{
18 |
19 | private String name;
20 |
21 | public RealSubject(String name){
22 | this.name = name;
23 | }
24 |
25 | @Override
26 | public void request() {
27 | System.out.println(name + "----��ʵ��ɫ......");
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantReadWriteLock/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantReadWriteLock;
2 |
3 | public class Test {
4 | public static void main(String[] args) {
5 | PricesInfo pricesInfo = new PricesInfo();
6 |
7 | Reader[] readers = new Reader[5];
8 | Thread[] readerThread = new Thread[5];
9 | for (int i=0; i<5; i++){
10 | readers[i]=new Reader(pricesInfo);
11 | readerThread[i]=new Thread(readers[i]);
12 | }
13 |
14 | Writer writer=new Writer(pricesInfo);
15 | Thread threadWriter=new Thread(writer);
16 |
17 | for (int i=0; i<5; i++){
18 | readerThread[i].start();
19 | }
20 | threadWriter.start();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_1/RealSubject.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._1;
2 |
3 | /**
4 | *
5 | * ��ʵ��ɫ�������ɫ���������ʵ��������������Ҫ���õĶ���
6 | *
7 | * @Project:JavaCore
8 | * @file:RealSubject.java
9 | *
10 | * @Author:chenssy
11 | * @email:chenssy995812509@163.com
12 | * @url : http://cmsblogs.com
13 | * @qq : 122448894
14 | *
15 | * @data:2016��1��6��
16 | */
17 | public class RealSubject implements Subject{
18 |
19 | private String name;
20 |
21 | public RealSubject(String name){
22 | this.name = name;
23 | }
24 |
25 | @Override
26 | public void request() {
27 | System.out.println(name + "----��ʵ��ɫ......");
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantReadWriteLock/Writer.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantReadWriteLock;
2 |
3 | public class Writer implements Runnable{
4 | private PricesInfo pricesInfo;
5 |
6 | public Writer(PricesInfo pricesInfo){
7 | this.pricesInfo = pricesInfo;
8 | }
9 |
10 | @Override
11 | public void run() {
12 | for (int i=0; i<3; i++) {
13 | System.out.printf("Writer: Attempt to modify the prices.\n");
14 | pricesInfo.setPrices(Math.random()*10, Math.random()*8);
15 | System.out.printf("Writer: Prices have been modified.\n");
16 | try {
17 | Thread.sleep(2);
18 | } catch (InterruptedException e) {
19 | e.printStackTrace();
20 | }
21 | }
22 |
23 | }
24 |
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/junit/_1/Calculator.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.junit._1;
2 |
3 | public class Calculator {
4 | private static int result; // 静态变量,用于存储运行结果
5 |
6 | public void add(int n) {
7 | result = result + n;
8 | }
9 |
10 | public void substract(int n) {
11 | result = result - 1; // Bug: 正确的应该是 result =result-n
12 | }
13 |
14 | public void multiply(int n) {
15 | } // 此方法尚未写好
16 |
17 | public void divide(int n) {
18 | result = result / n;
19 | }
20 |
21 | public void square(int n) {
22 | result = n * n;
23 | }
24 |
25 | public void squareRoot(int n) {
26 | for (;;)
27 | ; // Bug : 死循环
28 | }
29 |
30 | public void clear() { // 将结果清零
31 | result = 0;
32 | }
33 |
34 | public int getResult() {
35 | return result;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Exchanger/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.ThreadUtils.Exchanger;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 | import java.util.concurrent.Exchanger;
6 |
7 | public class Test {
8 | public static void main(String[] args) {
9 | List buffer1 = new ArrayList();
10 | List buffer2 = new ArrayList();
11 |
12 | Exchanger> exchanger = new Exchanger>();
13 |
14 | Producer producer = new Producer(buffer1, exchanger);
15 | Consumer consumer = new Consumer(buffer2, exchanger);
16 |
17 | Thread thread1 = new Thread(producer);
18 | Thread thread2 = new Thread(consumer);
19 |
20 | thread1.start();
21 | thread2.start();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Atomic/AtomicIntegerArrayTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Atomic;
2 |
3 | import java.util.concurrent.atomic.AtomicIntegerArray;
4 |
5 | /**
6 | * AtomicIntegerArrayTest
7 | *
8 | * @author:chenssy
9 | * @date : 2017/3/28 9:11
10 | */
11 | public class AtomicIntegerArrayTest{
12 | private static int[] value = new int[]{1,2,3,4,5};
13 |
14 | private static AtomicIntegerArray aia = new AtomicIntegerArray(value);
15 |
16 | public static void main(String[] args){
17 | aia.addAndGet(2,10); //第三个元素 + 10
18 | System.out.println(aia.get(2));
19 |
20 | //内部进行复制,不会影响原本value
21 | aia.set(1,0);
22 | System.out.println(value[0]);
23 | System.out.println(aia.get(1));
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/CyclicBarrier/CyclicBarrierTest_1.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.CyclicBarrier;
2 |
3 | import java.util.concurrent.CyclicBarrier;
4 |
5 | public class CyclicBarrierTest_1 {
6 | private static CyclicBarrier barrier;
7 |
8 | static class threadTest1 extends Thread{
9 | public void run() {
10 | System.out.println(Thread.currentThread().getName() + "�ﵽ...");
11 | try {
12 | barrier.await();
13 | } catch (Exception e) {
14 | e.printStackTrace();
15 | }
16 | System.out.println(Thread.currentThread().getName() + "ִ�����...");
17 | }
18 | }
19 |
20 | public static void main(String[] args) {
21 | barrier = new CyclicBarrier(5);
22 | for(int i = 1 ; i <= 5 ; i++){
23 | new threadTest1().start();
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Semaphore/Job.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Semaphore;
2 |
3 | /**
4 | *
5 | * @Project:javaConcurrency
6 | * @file:Job.java
7 | *
8 | * @Author:chenssy
9 | * @email:chenssy995812509@163.com
10 | * @url : http://cmsblogs.com
11 | * @qq : 122448894
12 | *
13 | * @data:2015��9��6��
14 | */
15 | public class Job implements Runnable{
16 | private PrintQueue printQueue;
17 |
18 | public Job(PrintQueue printQueue){
19 | this.printQueue = printQueue;
20 | }
21 |
22 | @Override
23 | public void run() {
24 | System.out.println(Thread.currentThread().getName() + " Going to print a job");
25 | printQueue.printJob(new Object());
26 | System.out.println(Thread.currentThread().getName() + " the document has bean printed");
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Atomic/AtomicIntegerTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Atomic;
2 |
3 | import java.util.concurrent.atomic.AtomicInteger;
4 |
5 | /**
6 | * AtomicInteger
7 | *
8 | * addAndGet:以原子方式将输入的值与实例的值相加并返回结果
9 | * getAndIncrement:以原子方式将当前值加1,返回的自增之前的值
10 | * lazySet:最终会设置成newValue,使用lazySet设置值后,可能会导致其他线程在之后的一小段时间内还是可以读到旧值
11 | * getAndSet:以原子方式设置为newValue,返回oldValue
12 | *
13 | * @author:chenssy
14 | * @date : 2017/3/28 8:56
15 | */
16 | public class AtomicIntegerTest {
17 | private static AtomicInteger ai = new AtomicInteger(1);
18 |
19 | public static void main(String[] args){
20 | System.out.println(ai.getAndIncrement());
21 | System.out.println(ai.getAndSet(999));
22 | System.out.println(ai.get());
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/GuardedSuspension/ServerThread.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.GuardedSuspension;
2 |
3 | /**
4 | * @Author: chenssy
5 | * @Date: 2016/10/26 22:27
6 | */
7 | public class ServerThread extends Thread{
8 | private RequestQueue requestQueue;
9 |
10 | public ServerThread(RequestQueue requestQueue,String name){
11 | super(name);
12 | this.requestQueue = requestQueue;
13 | }
14 |
15 | @Override
16 | public void run() {
17 | while(true){
18 | final Request request = requestQueue.getRequest();
19 |
20 | try {
21 | Thread.sleep(1000);
22 | } catch (InterruptedException e) {
23 |
24 | }
25 | System.out.println(Thread.currentThread().getName() + " handles " + request);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/GuardedSuspension/RequestQueue.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.GuardedSuspension;
2 |
3 | import java.util.LinkedList;
4 | import java.util.List;
5 |
6 | /**
7 | * 维护Request请求信息
8 | *
9 | * @Author: chenssy
10 | * @Date: 2016/10/26 22:23
11 | */
12 | public class RequestQueue {
13 | private LinkedList queue = new LinkedList();
14 |
15 | public synchronized Request getRequest(){
16 | while(queue.size() == 0){
17 | try{
18 | wait(); //等待,直到有Request
19 | }catch(InterruptedException e){
20 |
21 | }
22 | }
23 |
24 | return (Request) queue.remove();
25 | }
26 |
27 | public synchronized void addRequest(Request request){
28 | queue.add(request);
29 | notifyAll(); //唤醒getRequest方法
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/basic/synchronize/Account.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.basic.synchronize;
2 |
3 |
4 | public class Account {
5 | private double balance = 0.0f;
6 |
7 | public double getBalance() {
8 | return balance;
9 | }
10 |
11 | public void setBalance(double balance) {
12 | this.balance = balance;
13 | }
14 |
15 | public synchronized void addAmount(double amount){
16 | double tmp = balance;
17 | try {
18 | Thread.sleep(10);
19 | } catch (InterruptedException e) {
20 | e.printStackTrace();
21 | };
22 | tmp += amount;
23 | balance = tmp;
24 | }
25 |
26 | public synchronized void SubtractAmount(double amount){
27 | double tmp = balance;
28 | try {
29 | Thread.sleep(10);
30 | } catch (InterruptedException e) {
31 | e.printStackTrace();
32 | };
33 | tmp -= amount;
34 | balance = tmp;
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/basic/MultiThread.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.basic;
2 |
3 | import java.lang.management.ManagementFactory;
4 | import java.lang.management.ThreadInfo;
5 | import java.lang.management.ThreadMXBean;
6 |
7 | /**
8 | * java线程管理
9 | * ThreadMXBean : Java 虚拟机线程系统的管理接口
10 | * ThreadInfo : 线程信息
11 | *
12 | * @author:chenssy
13 | * @date : 2016/8/8 8:42
14 | */
15 | public class MultiThread {
16 | public static void main(String[] args){
17 | //获取java线程管理的Bean
18 | ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
19 | //不需要获取同步的monitor和synchronizer信息,仅获取线程和线程的堆栈信息
20 | ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false,false);
21 |
22 | for(ThreadInfo info : threadInfos){
23 | System.out.println("[" + info.getThreadId() + "] :" + info.getThreadName());
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/core/ChannelTest.java:
--------------------------------------------------------------------------------
1 | package com.NIO.core;
2 |
3 | import java.io.RandomAccessFile;
4 | import java.nio.ByteBuffer;
5 | import java.nio.channels.FileChannel;
6 |
7 | public class ChannelTest {
8 | public static void main(String[] args) throws Exception {
9 | RandomAccessFile file = new RandomAccessFile("E:/workspace/channelTest.txt","rw");
10 |
11 | FileChannel fileChannel = file.getChannel();
12 |
13 | ByteBuffer buf = ByteBuffer.allocate(8);
14 |
15 | int bytesRead = fileChannel.read(buf);
16 | while (bytesRead != -1){
17 | System.out.println("Read " + bytesRead);
18 | buf.flip();
19 | while (buf.hasRemaining()){
20 | System.out.println((char)buf.get());
21 | }
22 |
23 | buf.clear();
24 | bytesRead = fileChannel.read(buf);
25 | }
26 |
27 | file.close();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/frameDecoder/FixedLengthFrameDecoder/EchoServerHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.frameDecoder.FixedLengthFrameDecoder;
2 |
3 | import io.netty.buffer.ByteBuf;
4 | import io.netty.buffer.Unpooled;
5 | import io.netty.channel.ChannelHandlerAdapter;
6 | import io.netty.channel.ChannelHandlerContext;
7 |
8 | public class EchoServerHandler extends ChannelHandlerAdapter{
9 |
10 | @Override
11 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
12 | String body = (String) msg;
13 |
14 | System.out.println("Receive client : [" + body + "]");
15 |
16 | ByteBuf buf = Unpooled.copiedBuffer(body.getBytes());
17 |
18 | ctx.writeAndFlush(buf);
19 | }
20 |
21 | @Override
22 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
23 | cause.printStackTrace();
24 | ctx.close();
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantLock/_1/PrintQueue.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantLock._1;
2 |
3 | import java.util.concurrent.locks.Lock;
4 | import java.util.concurrent.locks.ReentrantLock;
5 |
6 | public class PrintQueue {
7 | private final Lock queueLock = new ReentrantLock();
8 |
9 | public void printJob(Object document) {
10 | try {
11 | queueLock.lock();
12 | System.out.println(Thread.currentThread().getName() + ": Going to print a document");
13 | Long duration = (long) (Math.random() * 10000);
14 | System.out.println(Thread.currentThread().getName() + ":PrintQueue: Printing a Job during " + (duration / 1000) + " seconds");
15 | Thread.sleep(duration);
16 | System.out.printf(Thread.currentThread().getName() + ": The document has been printed\n");
17 | } catch (InterruptedException e) {
18 | e.printStackTrace();
19 | } finally {
20 | queueLock.unlock();
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/CyclicBarrier/CyclicBarrierTest_2.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.CyclicBarrier;
2 |
3 | import java.util.concurrent.CyclicBarrier;
4 |
5 | public class CyclicBarrierTest_2 {
6 | private static CyclicBarrier barrier;
7 |
8 | static class threadTest1 extends Thread{
9 | public void run() {
10 | System.out.println(Thread.currentThread().getName() + "�ﵽ...");
11 | try {
12 | barrier.await();
13 | } catch (Exception e) {
14 | e.printStackTrace();
15 | }
16 | System.out.println(Thread.currentThread().getName() + "ִ�����...");
17 | }
18 | }
19 |
20 | public static void main(String[] args) {
21 | barrier = new CyclicBarrier(5,new Runnable() {
22 |
23 | @Override
24 | public void run() {
25 | System.out.println("ִ��CyclicBarrier�е�����.....");
26 | }
27 | });
28 | for(int i = 1 ; i <= 5 ; i++){
29 | new threadTest1().start();
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Phaser/PhaserTest_1.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Phaser;
2 |
3 | import java.util.concurrent.Phaser;
4 |
5 | public class PhaserTest_1 {
6 | public static void main(String[] args) {
7 | Phaser phaser = new Phaser(5);
8 |
9 | for(int i = 0 ; i < 5 ; i++){
10 | Task_01 task_01 = new Task_01(phaser);
11 | Thread thread = new Thread(task_01, "PhaseTest_" + i);
12 | thread.start();
13 | }
14 | }
15 |
16 | static class Task_01 implements Runnable{
17 | private final Phaser phaser;
18 |
19 | public Task_01(Phaser phaser){
20 | this.phaser = phaser;
21 | }
22 |
23 | @Override
24 | public void run() {
25 | System.out.println(Thread.currentThread().getName() + "ִ��������ɣ��ȴ���������ִ��......");
26 | //�ȴ���������ִ�����
27 | phaser.arriveAndAwaitAdvance();
28 | System.out.println(Thread.currentThread().getName() + "����ִ������...");
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/proxy/_2/DynamicSubject.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.proxy._2;
2 |
3 | import java.lang.reflect.InvocationHandler;
4 | import java.lang.reflect.Method;
5 |
6 | /**
7 | * ��������
8 | *
9 | * @Project:JavaCore
10 | * @file:DynamicSubject.java
11 | *
12 | * @Author:chenssy
13 | * @email:chenssy995812509@163.com
14 | * @url : http://cmsblogs.com
15 | * @qq : 122448894
16 | *
17 | * @data:2016��1��6��
18 | */
19 | public class DynamicSubject implements InvocationHandler{
20 |
21 | private Object object;
22 |
23 | public DynamicSubject(Object object){
24 | this.object = object;
25 | }
26 |
27 | @Override
28 | public Object invoke(Object proxy, Method method, Object[] args)
29 | throws Throwable {
30 | System.out.println("���ô�����֮ǰ��ִ�еķ���...." + method);
31 |
32 | method.invoke(object, args);
33 |
34 | System.out.println("���ô�����֮��ִ�еķ���...." + method);
35 |
36 | return null;
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/ReentrantReadWriteLock/PricesInfo.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.ReentrantReadWriteLock;
2 |
3 | import java.util.concurrent.locks.ReadWriteLock;
4 | import java.util.concurrent.locks.ReentrantReadWriteLock;
5 |
6 | public class PricesInfo {
7 | private double price1;
8 | private double price2;
9 |
10 | private ReadWriteLock lock;
11 |
12 | public PricesInfo(){
13 | price1 = 1.0;
14 | price2 = 2.0;
15 |
16 | lock = new ReentrantReadWriteLock();
17 | }
18 |
19 | public double getPrice1(){
20 | lock.readLock().lock();
21 | double value = price1;
22 | lock.readLock().unlock();
23 | return value;
24 | }
25 |
26 | public double getPrice2(){
27 | lock.readLock().lock();
28 | double value = price2;
29 | lock.readLock().unlock();
30 | return value;
31 | }
32 |
33 | public void setPrices(double price1, double price2){
34 | lock.writeLock().lock();
35 | this.price1 = price1;
36 | this.price2 = price2;
37 | lock.writeLock().unlock();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Semaphore/PrintQueue.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Semaphore;
2 |
3 | import java.util.concurrent.Semaphore;
4 |
5 | /**
6 | * ��ӡ����
7 | * @Project:javaConcurrency
8 | * @file:PrintQueue.java
9 | *
10 | * @Author:chenssy
11 | * @email:chenssy995812509@163.com
12 | * @url : http://cmsblogs.com
13 | * @qq : 122448894
14 | *
15 | * @data:2015��9��6��
16 | */
17 | public class PrintQueue {
18 | private final Semaphore semaphore; //�������
19 |
20 | public PrintQueue(){
21 | semaphore = new Semaphore(1);
22 | }
23 |
24 | public void printJob(Object document){
25 | try {
26 | semaphore.acquire();//����acquire��ȡ�ź���
27 | long duration = (long) (Math.random() * 10);
28 | System.out.println( Thread.currentThread().getName() +
29 | "PrintQueue : Printing a job during " + duration);
30 | Thread.sleep(duration);
31 | } catch (InterruptedException e) {
32 | e.printStackTrace();
33 | } finally{
34 | semaphore.release(); //�ͷ��ź���
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/concurrentCollection/CopyOnWriteArraySet/CopyOnWriteArraySetTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.concurrentCollection.CopyOnWriteArraySet;
2 |
3 | import java.util.Iterator;
4 | import java.util.Set;
5 | import java.util.concurrent.CopyOnWriteArraySet;
6 |
7 | public class CopyOnWriteArraySetTest {
8 | private static Set setes = new CopyOnWriteArraySet();
9 |
10 | public static void main(String[] args) {
11 | new MyThread("testA").start();
12 | new MyThread("testB").start();
13 | }
14 |
15 | private static class MyThread extends Thread{
16 | MyThread(String name){
17 | super(name);
18 | }
19 | public void run(){
20 | for(int i = 0 ; i < 5 ; i++){
21 | setes.add(Thread.currentThread().getName() + "--" + i);
22 | printAll();
23 | }
24 | }
25 | }
26 |
27 | public static void printAll() {
28 | Iterator iterator = setes.iterator();
29 | while(iterator.hasNext()){
30 | System.out.print(iterator.next() + " ");
31 | }
32 | System.out.println("");
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Exchanger/Consumer.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.ThreadUtils.Exchanger;
2 |
3 | import java.util.List;
4 | import java.util.concurrent.Exchanger;
5 |
6 | public class Consumer implements Runnable{
7 | private List buffer;
8 |
9 | private final Exchanger> exchanger;
10 |
11 | public Consumer(List buffer,Exchanger> exchanger){
12 | this.buffer = buffer;
13 | this.exchanger = exchanger;
14 | }
15 |
16 | @Override
17 | public void run() {
18 | int cycle = 1;
19 | for(int i = 0 ; i < 10 ; i++){
20 | System.out.println("Consumer : Cycle :" + cycle);
21 |
22 | //����exchange()������߽�����ݽ���
23 | try {
24 | buffer = exchanger.exchange(buffer);
25 | } catch (InterruptedException e) {
26 | e.printStackTrace();
27 | }
28 | System.out.println("Consumer :" + buffer.size());
29 | for(int j = 0 ; j < 10 ; j++){
30 | System.out.println("Consumer : " + buffer.get(0));
31 | buffer.remove(0);
32 | }
33 | cycle++ ;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Phaser/PhaserTest_5.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Phaser;
2 |
3 | import java.util.concurrent.Phaser;
4 |
5 | public class PhaserTest_5 {
6 | public static void main(String[] args) {
7 | Phaser phaser = new Phaser(1); //�൱��CountDownLatch(1)
8 |
9 | //���������
10 | for(int i = 0 ; i < 3 ; i++){
11 | Task_05 task = new Task_05(phaser);
12 | Thread thread = new Thread(task,"PhaseTest_" + i);
13 | thread.start();
14 | }
15 |
16 | try {
17 | //�ȴ�3��
18 | Thread.sleep(3000);
19 | } catch (InterruptedException e) {
20 | e.printStackTrace();
21 | }
22 | phaser.arrive(); //countDownLatch.countDown()
23 | }
24 |
25 | static class Task_05 implements Runnable{
26 | private final Phaser phaser;
27 |
28 | Task_05(Phaser phaser){
29 | this.phaser = phaser;
30 | }
31 |
32 | @Override
33 | public void run() {
34 | phaser.awaitAdvance(phaser.getPhase()); //countDownLatch.await()
35 | System.out.println(Thread.currentThread().getName() + "ִ������...");
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/frameDecoder/DelimiterBasedFrameDecoder/EchoServerHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.frameDecoder.DelimiterBasedFrameDecoder;
2 |
3 | import io.netty.buffer.ByteBuf;
4 | import io.netty.buffer.Unpooled;
5 | import io.netty.channel.ChannelHandlerAdapter;
6 | import io.netty.channel.ChannelHandlerContext;
7 |
8 | public class EchoServerHandler extends ChannelHandlerAdapter{
9 |
10 | private int counter = 0;
11 |
12 | @Override
13 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
14 | String body = (String) msg;
15 |
16 | System.out.println("This is " + (++counter) + " times reveive client:[" + body + "]");
17 |
18 | if(counter % 3 == 0){
19 | body += "$_";
20 | }
21 |
22 | ByteBuf buf = Unpooled.copiedBuffer(body.getBytes());
23 |
24 | ctx.writeAndFlush(buf);
25 | }
26 |
27 | @Override
28 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
29 | cause.printStackTrace();
30 | ctx.close();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/CountDownLatch/Conference.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.CountDownLatch;
2 |
3 | import java.util.concurrent.CountDownLatch;
4 |
5 | public class Conference implements Runnable{
6 | private final CountDownLatch countDown;
7 |
8 | public Conference(int count){
9 | countDown = new CountDownLatch(count);
10 | }
11 |
12 | /**
13 | * �����Ա�������arrive����������һ��CountDownLatch����countDown�������������-1
14 | * @author:chenssy
15 | * @data:2015��9��6��
16 | *
17 | * @param name
18 | */
19 | public void arrive(String name){
20 | System.out.println(name + "����.....");
21 | //����countDown()������� - 1
22 | countDown.countDown();
23 | System.out.println("���� " + countDown.getCount() + "û�е���...");
24 | }
25 |
26 | @Override
27 | public void run() {
28 | System.out.println("�����ᣬ�μӻ�����Ա����Ϊ��" + countDown.getCount());
29 | //����await()�ȴ����е������Ա����
30 | try {
31 | countDown.await();
32 | } catch (InterruptedException e) {
33 | }
34 | System.out.println("������Ա�Ѿ�������鿪ʼ.....");
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/concurrentCollection/CopyOnWriteArrayList/CopyOnWriteArrayListTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.concurrentCollection.CopyOnWriteArrayList;
2 |
3 | import java.util.Iterator;
4 | import java.util.List;
5 | import java.util.concurrent.CopyOnWriteArrayList;
6 |
7 | public class CopyOnWriteArrayListTest {
8 | private static List list = new CopyOnWriteArrayList();
9 |
10 | public static void main(String[] args) {
11 | new MyThread("testA").start();
12 | new MyThread("testB").start();
13 | }
14 |
15 | private static class MyThread extends Thread{
16 | public MyThread(String name) {
17 | super(name);
18 | }
19 |
20 | @Override
21 | public void run() {
22 | for(int i = 0 ; i < 10 ; i++){
23 | list.add(Thread.currentThread().getName() + "-" + i );
24 | printAll();
25 | }
26 | }
27 | }
28 |
29 | private static void printAll() {
30 | Iterator iterator = list.iterator();
31 | while(iterator.hasNext()){
32 | String value = iterator.next();
33 | System.out.print(value + " ");
34 | }
35 | System.out.println();
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/core/BufferTest.java:
--------------------------------------------------------------------------------
1 | package com.NIO.core;
2 |
3 | import java.io.RandomAccessFile;
4 | import java.nio.ByteBuffer;
5 | import java.nio.channels.FileChannel;
6 |
7 | /**
8 | * Buffer测试
9 | * buffer使用步骤:
10 | * 1、写入数据到Buffer
11 | * 2、调用flip()方法
12 | * 3、从Buffer中读取数据
13 | * 4、调用clear()方法或者compact()方法
14 | *
15 | * @author chenming
16 | * @date 2016-11-21
17 | * @since v1.0.0
18 | */
19 | public class BufferTest {
20 | public static void main(String[] args) throws Exception {
21 | RandomAccessFile file = new RandomAccessFile("E:/workspace/channelTest.txt","rw");
22 |
23 | FileChannel fileChannel = file.getChannel();
24 |
25 | //对buffer对象进行分配
26 | ByteBuffer buf = ByteBuffer.allocate(24);
27 |
28 | int bytesRead = fileChannel.read(buf);
29 | while (bytesRead != -1){
30 | buf.flip(); //切换到读模式
31 | while (buf.hasRemaining()){
32 | System.out.println((char)buf.get());
33 | }
34 |
35 | buf.clear(); //清空缓存
36 | bytesRead = fileChannel.read(buf);
37 | }
38 |
39 | file.close();
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/JVM/stack/StackGCTest.java:
--------------------------------------------------------------------------------
1 | package com.ufclub.ljs.autoInvest.model.AutoInvestSettingcom.JVM.stack;
2 |
3 | /**
4 | * @author chenssy
5 | * @date 2016/11/19
6 | * @since v1.0.0
7 | */
8 | public class StackGCTest {
9 |
10 | //如果一个局部变量被保存在局部变量表中,那么GC就能引用到这个局部变量所指向的内存空间
11 | //从而在GC时,可能无法回收这部分空间
12 | public static void test1(){
13 | {
14 | byte[] bytes = new byte[6 * 1024 * 1024];
15 | }
16 | System.gc();
17 | System.out.println("first explict gc over");
18 | }
19 |
20 | //手工释放该空间,将变量设置为null
21 | public static void test2(){
22 | {
23 | byte[] bytes = new byte[6 * 1024 * 1024];
24 | bytes = null;
25 | }
26 | System.gc();
27 | System.out.println("first explict gc over");
28 | }
29 |
30 | //或者重新声明一个新的局部变量,从而复用该变量的字,使其所占有的空间可以被GC回收
31 | public static void test3(){
32 | {
33 | byte[] bytes = new byte[6 * 1024 * 1024];
34 | }
35 | int a = 0;
36 | System.gc();
37 | System.out.println("first explict gc over");
38 | }
39 |
40 |
41 | public static void main(String[] args){
42 | test1();
43 | // test2();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/GuardedSuspension/ClientThread.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.GuardedSuspension;
2 |
3 | /**
4 | * @Author: chenssy
5 | * @Date: 2016/10/26 22:30
6 | */
7 | public class ClientThread extends Thread{
8 | private RequestQueue requestQueue;
9 |
10 | public ClientThread(RequestQueue requestQueue ,String name){
11 | super(name);
12 | this.requestQueue = requestQueue;
13 | }
14 |
15 | @Override
16 | public void run() {
17 | for(int i = 0 ; i < 10 ; i++){
18 | Request request = new Request("RequestId:" + i + "ThreadName:" + Thread.currentThread().getName());
19 | System.out.println(Thread.currentThread().getName() + " request " + request);
20 |
21 | requestQueue.addRequest(request); //提交请求
22 |
23 | try {
24 | Thread.sleep(100); //客户端请求速度快于服务端处理速度
25 | } catch (InterruptedException e) {
26 | e.printStackTrace();
27 | }
28 | System.out.println("ClientThread name is "+Thread.currentThread().getName());
29 | }
30 |
31 | System.out.println(Thread.currentThread().getName() + "request end");
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/basic/JoinThread.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.basic;
2 |
3 | import java.util.concurrent.TimeUnit;
4 |
5 | /**
6 | * Thread.join()
7 | *
8 | * @author:chenssy
9 | * @date : 2016/8/10 8:54
10 | */
11 | public class JoinThread {
12 | static class Domino implements Runnable{
13 | private Thread thread;
14 |
15 | Domino(Thread thread){
16 | this.thread = thread;
17 | }
18 |
19 | @Override
20 | public void run() {
21 | try {
22 | thread.join();
23 | } catch (InterruptedException e) {
24 | e.printStackTrace();
25 | }
26 | System.out.println(Thread.currentThread().getName() + " terminate");
27 | }
28 | }
29 |
30 | public static void main(String[] args) throws InterruptedException {
31 | Thread previous = Thread.currentThread();
32 |
33 | for(int i = 0 ; i < 10 ; i++){
34 | Thread thread = new Thread(new Domino(previous),String.valueOf(i));
35 | thread.start();
36 |
37 | previous = thread;
38 | }
39 |
40 | TimeUnit.SECONDS.sleep(5);
41 | System.out.println(Thread.currentThread().getName() + " terminate");
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/frameDecoder/DelimiterBasedFrameDecoder/EchoClientHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.frameDecoder.DelimiterBasedFrameDecoder;
2 |
3 | import io.netty.buffer.Unpooled;
4 | import io.netty.channel.ChannelHandlerAdapter;
5 | import io.netty.channel.ChannelHandlerContext;
6 |
7 | public class EchoClientHandler extends ChannelHandlerAdapter{
8 | private int counter;
9 |
10 | // 末尾增加$_
11 | static final String ECHO_REQ = "Hi,chenssy,welcome to netty.$_";
12 |
13 | @Override
14 | public void channelActive(ChannelHandlerContext ctx) throws Exception {
15 | for(int i = 0 ; i < 10 ; i++){
16 | ctx.writeAndFlush(Unpooled.copiedBuffer(ECHO_REQ.getBytes()));
17 | }
18 | }
19 |
20 | @Override
21 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
22 | System.out.println("This is " + (++counter) + " times receive server:[" + msg + "]");
23 | }
24 |
25 | @Override
26 | public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
27 | ctx.flush();
28 | }
29 |
30 | @Override
31 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
32 | cause.printStackTrace();
33 | ctx.close();
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/MasterWorker/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.MasterWorker;
2 |
3 | import java.util.Map;
4 | import java.util.Set;
5 |
6 | /**
7 | * @Author: chenssy
8 | * @Date: 2016/10/26 21:32
9 | */
10 | public class Test {
11 | public static void main(String[] args){
12 | //五个进程跑
13 | Master master = new Master(new PlusWorker(),5);
14 |
15 | //提交100个子任务
16 | for(int i = 0 ; i < 100 ; i++){
17 | master.submit(i);
18 | }
19 |
20 | master.execute();
21 |
22 | int result = 0 ;
23 |
24 | Map resultMap = master.getResultMap();
25 |
26 | while(resultMap.size() > 0 || !master.isComplete()){
27 | Set keys = resultMap.keySet();
28 | String key = null;
29 | for(String s : keys){
30 | key = s;
31 | break;
32 | }
33 |
34 | Integer i = null;
35 |
36 | if(key != null){
37 | i = (Integer) resultMap.get(key);
38 | }
39 | if(i != null){
40 | result += i;
41 | }
42 |
43 | if(key != null){
44 | resultMap.remove(key);
45 | }
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/ThreadUtils/Phaser/PhaserTest_2.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Phaser;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.IOException;
5 | import java.io.InputStreamReader;
6 | import java.util.concurrent.Phaser;
7 |
8 | public class PhaserTest_2 {
9 | public static void main(String[] args) throws InterruptedException, IOException {
10 | Phaser phaser = new Phaser(6);
11 | int i = 0;
12 | for(i = 1 ; i <= 6 ; i++){
13 | Task_02 task = new Task_02(phaser);
14 | Thread thread = new Thread(task,"task_" + i);
15 | thread.start();
16 | }
17 | System.out.println("Press ENTER to continue");
18 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
19 | reader.readLine();
20 | //���»س���ִ��
21 | phaser.arriveAndDeregister();
22 | }
23 |
24 |
25 | static class Task_02 implements Runnable{
26 | private final Phaser phaser;
27 |
28 | public Task_02(Phaser phaser){
29 | this.phaser = phaser;
30 | }
31 |
32 |
33 | @Override
34 | public void run() {
35 | System.out.println(Thread.currentThread().getName() + "��ʼִ������...");
36 | phaser.arriveAndAwaitAdvance();
37 | System.out.println(Thread.currentThread().getName() + "����ִ������...");
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/base/TimerServerHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.base;
2 |
3 | import io.netty.buffer.ByteBuf;
4 | import io.netty.buffer.Unpooled;
5 | import io.netty.channel.ChannelHandlerAdapter;
6 | import io.netty.channel.ChannelHandlerContext;
7 |
8 | import java.util.Date;
9 |
10 |
11 | public class TimerServerHandler extends ChannelHandlerAdapter{
12 |
13 | @Override
14 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
15 | ByteBuf buf = (ByteBuf) msg;
16 |
17 | byte[] req = new byte[buf.readableBytes()];
18 | buf.readBytes(req);
19 |
20 | String body = new String(req,"UTF-8");
21 | System.out.println("The time server receive order:" + body);
22 |
23 | String currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body) ? new Date(System.currentTimeMillis()).toString() : "BAD ORDER";
24 |
25 | ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes());
26 |
27 | ctx.write(resp);
28 | }
29 |
30 | @Override
31 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
32 | ctx.close();
33 | }
34 |
35 | @Override
36 | public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
37 | ctx.flush();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/tcpIP/stickers/TimerServerHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.tcpIP.stickers;
2 |
3 | import io.netty.buffer.ByteBuf;
4 | import io.netty.buffer.Unpooled;
5 | import io.netty.channel.ChannelHandlerAdapter;
6 | import io.netty.channel.ChannelHandlerContext;
7 |
8 | import java.util.Date;
9 |
10 | /**
11 | * 未考虑粘包拆包
12 | *
13 | * @author chenssy
14 | * @date 2017-05-05
15 | * @since v1.0.0
16 | */
17 | public class TimerServerHandler extends ChannelHandlerAdapter{
18 |
19 | private int counter;
20 |
21 | @Override
22 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
23 | String body = (String) msg;
24 |
25 | System.out.println("The time server receive order:" + body + "; the counter is :" + (++counter));
26 |
27 | String currentTime = " QUERY TIME ORDER".equalsIgnoreCase(body) ? new Date(System.currentTimeMillis()).toString() : "BAD ORDER";
28 |
29 | currentTime = currentTime + System.getProperty("line.separator");
30 |
31 | ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes());
32 |
33 | ctx.writeAndFlush(resp);
34 | }
35 |
36 | @Override
37 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
38 | ctx.close();
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/threadPool/custom/Test.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.threadPool.custom;
2 |
3 | /**
4 | * @author chenssy
5 | * @date 2016/10/31
6 | * @since v1.0.0
7 | */
8 | public class Test {
9 |
10 | public static void main(String[] args){
11 | long begin1 = System.currentTimeMillis();
12 | for(int i = 0 ; i < 500 ; i++){
13 | new Thread(new MyThread("no pool_"+i)).start();
14 | }
15 | long end1 = System.currentTimeMillis();
16 |
17 | long begin2 = System.currentTimeMillis();
18 | for(int i = 0 ; i < 500 ; i++){
19 | ThreadPool.getInstance().start(new MyThread("pool_"+i));
20 | }
21 | long end2 = System.currentTimeMillis();
22 |
23 | System.out.println("no pool times:" + (end1 - begin1));
24 | System.out.println("pool times:" + (end2 - begin2));
25 | }
26 |
27 | private static class MyThread implements Runnable{
28 | String name = null;
29 | public MyThread(String name) {
30 | this.name = name;
31 | }
32 |
33 | @Override
34 | public void run() {
35 | try {
36 | Thread.sleep(100);
37 | } catch (InterruptedException e) {
38 | e.printStackTrace();
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Atomic/AtomicReferenceTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Atomic;
2 |
3 | import java.util.concurrent.atomic.AtomicReference;
4 |
5 | /**
6 | * AtomicReferenceTest
7 | *
8 | * @author:chenssy
9 | * @date : 2017/3/28 9:25
10 | */
11 | public class AtomicReferenceTest {
12 | private static class User{
13 | private String name;
14 | private int old;
15 |
16 | public User(String name, int old) {
17 | this.name = name;
18 | this.old = old;
19 | }
20 |
21 | public int getOld() {
22 | return old;
23 | }
24 |
25 | public String getName() {
26 | return name;
27 | }
28 |
29 | @Override
30 | public String toString() {
31 | return "{name: " + getName() + ",old:"+getOld()+"}";
32 | }
33 | }
34 |
35 | private static AtomicReference atomicReference = new AtomicReference();
36 |
37 | public static void main(String[] args){
38 | User user = new User("chenssy",18);
39 | atomicReference.set(user);
40 | System.out.println(atomicReference.get().toString());
41 | User updateUser = new User("CHENSSY",22);
42 | atomicReference.compareAndSet(user,updateUser);
43 | System.out.println(atomicReference.get().toString());
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/JUC/Lock/AQS/twinsLock/TwinsLockTest.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.JUC.Lock.AQS.twinsLock;
2 |
3 | import java.util.concurrent.TimeUnit;
4 | import java.util.concurrent.locks.Lock;
5 |
6 | /**
7 | * ${todo}
8 | *
9 | * @author:chenssy
10 | * @date : 2016/10/14 10:44
11 | */
12 | public class TwinsLockTest {
13 | public static void main(String args[]) throws InterruptedException {
14 | final Lock lock = new TwinsLock();
15 |
16 | class Work extends Thread{
17 | @Override
18 | public void run() {
19 | lock.lock();
20 |
21 | try {
22 | TimeUnit.SECONDS.sleep(1);
23 | System.out.println(Thread.currentThread().getName());
24 | TimeUnit.SECONDS.sleep(1);
25 | } catch (InterruptedException e) {
26 | e.printStackTrace();
27 | } finally {
28 | lock.unlock();
29 | }
30 | }
31 | }
32 |
33 | for(int i = 0 ; i < 10 ; i++){
34 | Work work = new Work();
35 | work.setDaemon(true);
36 | work.start();
37 | }
38 |
39 | for(int i = 0 ; i < 10 ; i++){
40 | TimeUnit.SECONDS.sleep(1);
41 | //应该是成对输出!!
42 | System.out.println("");
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/com/NIO/netty/base/TimeClientHandler.java:
--------------------------------------------------------------------------------
1 | package com.NIO.netty.base;
2 |
3 | import io.netty.buffer.ByteBuf;
4 | import io.netty.buffer.Unpooled;
5 | import io.netty.channel.ChannelHandlerAdapter;
6 | import io.netty.channel.ChannelHandlerContext;
7 |
8 | public class TimeClientHandler extends ChannelHandlerAdapter{
9 |
10 | private final ByteBuf firstMessage;
11 |
12 | public TimeClientHandler(){
13 | byte[] req = "QUERY TIME ORDER".getBytes();
14 | firstMessage = Unpooled.buffer(req.length);
15 |
16 | firstMessage.writeBytes(req);
17 | }
18 |
19 |
20 |
21 | @Override
22 | public void channelActive(ChannelHandlerContext ctx) throws Exception {
23 | ctx.writeAndFlush(firstMessage);
24 | }
25 |
26 | @Override
27 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
28 | ByteBuf buf = (ByteBuf) msg;
29 |
30 | byte[] req = new byte[buf.readableBytes()];
31 | buf.readBytes(req);
32 |
33 | String body = new String(req,"UTF-8");
34 |
35 | System.out.println("Now is :" + body);
36 | }
37 |
38 | @Override
39 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
40 |
41 | System.out.println("cause by :" + cause.getMessage());
42 |
43 | ctx.close();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/com/javaCore/java_thread/model/MasterWorker/Worker.java:
--------------------------------------------------------------------------------
1 | package com.javaCore.java_thread.model.MasterWorker;
2 |
3 | import java.util.Map;
4 | import java.util.Queue;
5 |
6 | /**
7 | * @Author: chenssy
8 | * @Date: 2016/10/26 21:15
9 | */
10 | public class Worker implements Runnable{
11 | protected Queue