diff --git a/algorithms/pom.xml b/algorithms/pom.xml new file mode 100644 index 0000000..31df642 --- /dev/null +++ b/algorithms/pom.xml @@ -0,0 +1,78 @@ + + + + + java-learning + com.brianway.learning.java + 1.0-SNAPSHOT + + 4.0.0 + + algorithms + + algorithms + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + + maven-clean-plugin + 3.0.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.7.0 + + + maven-surefire-plugin + 2.20.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + diff --git a/algorithms/src/main/java/com/brianway/learning/algorithms/DistinctSubstring.java b/algorithms/src/main/java/com/brianway/learning/algorithms/DistinctSubstring.java new file mode 100644 index 0000000..6e4cce8 --- /dev/null +++ b/algorithms/src/main/java/com/brianway/learning/algorithms/DistinctSubstring.java @@ -0,0 +1,48 @@ +package com.brianway.learning.algorithms; + +/** + * Created by brian on 16/11/9. + * + * 对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度。 + * 给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度。 + * 保证A中字符全部为小写英文字符,且长度小于等于500。 + * + * 测试样例: + * "aabcb",5 + * 返回:3 + */ +public class DistinctSubstring { + public int longestSubstring(String A, int n) { + if (A == null || n == 0) { + return 0; + } + char[] s = A.toCharArray(); + int[] map = new int[256]; + for (int i = 0; i < 256; i++) { + map[i] = -1; + } + System.err.println(map['a']); + + int maxLen = 0; + int pre = -1; + int cur = 0; + for (int i = 0; i < n; i++) { + pre = Math.max(pre, map[s[i]]); + cur = i - pre; + System.out.println(s[i]+"("+i+") pre:"+ pre + " cur:"+cur); + System.err.println(map['a']); + maxLen = Math.max(cur, maxLen); + map[s[i]] = i; + } + return maxLen; + } + + public static void main(String[] args) { + DistinctSubstring d = new DistinctSubstring(); + System.out.println(d.longestSubstring("aabcba", 6)); +// System.out.println(d.longestSubstring("bacdbad",7)); +// System.out.println(d.longestSubstring("adsaasdfghjhgfdsa", +// "adsaasdfghjhgfdsa".length())); + } + +} \ No newline at end of file diff --git a/algorithms/src/test/java/com/brianway/learning/java/AppTest.java b/algorithms/src/test/java/com/brianway/learning/java/AppTest.java new file mode 100644 index 0000000..6a98f81 --- /dev/null +++ b/algorithms/src/test/java/com/brianway/learning/java/AppTest.java @@ -0,0 +1,25 @@ +package com.brianway.learning.java; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.function.Predicate; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() { + assertTrue( true ); + } + +} diff --git a/java-base/pom.xml b/java-base/pom.xml index c6536e9..5c86346 100644 --- a/java-base/pom.xml +++ b/java-base/pom.xml @@ -10,5 +10,13 @@ 4.0.0 java-base + + + junit + junit + 4.12 + + + \ No newline at end of file diff --git a/java-base/src/main/java/com/brianway/learning/java/base/constructor/FatherClass.java b/java-base/src/main/java/com/brianway/learning/java/base/constructor/FatherClass.java index 4ccca61..508984e 100644 --- a/java-base/src/main/java/com/brianway/learning/java/base/constructor/FatherClass.java +++ b/java-base/src/main/java/com/brianway/learning/java/base/constructor/FatherClass.java @@ -7,6 +7,7 @@ public class FatherClass { protected static int count = 10; private String name; + static String data = new String("静态变量初始化+++++++++++++++"); static { System.out.println("父类的静态属性count初始化:" + count); } diff --git a/java-base/src/main/java/com/brianway/learning/java/base/constructor/InitialOrderWithExtend.java b/java-base/src/main/java/com/brianway/learning/java/base/constructor/InitialOrderWithExtend.java new file mode 100644 index 0000000..b8bd706 --- /dev/null +++ b/java-base/src/main/java/com/brianway/learning/java/base/constructor/InitialOrderWithExtend.java @@ -0,0 +1,93 @@ +package com.brianway.learning.java.base.constructor; +/* +* 执行顺序: +* 1. 父类 >子类 +* 2. 同类间: 同优先级按代码先后顺序; +* 静态块, 静态类变量, 最高优先级 +* 普通块和普通成员, 次优先级 +* 构造函数 次次优先级 +* 对象方法 最低优先级 +* 3.子类初始化时,会首先调用父类的无参构造函数(无论是否有super()),然后子类的构造函数 +*/ +public class InitialOrderWithExtend { + public static void main(String[] args) { +// Father father = new Son(); + Father father = new Son(1000000); + + } +} + +class Father { + { + System.out.println("父类 非静态块 1 执行"); + } + static { + System.out.println("父类 static块 1 执行"); + } + static Sample staticSam1 = new Sample("父类 静态成员 staticSam1 初始化"); + Sample sam1 = new Sample("父类 普通成员 sam1 初始化"); + static Sample staticSam2 = new Sample("父类 静态成员 staticSam2 初始化"); + static { + System.out.println("父类 static块 2 执行"); + } + + Father() { + System.out.println("父类 默认构造函数被调用"); + } + { + System.out.println("父类 普通块被调用"); + } + + Sample sam2 = new Sample("父类 普通成员 sam2 初始化"); + + { + System.out.println("父类 非静态块 2 执行"); + } + +} + +class Son extends Father { + { + System.out.println("子类 非静态块 1 执行"); + } + private int number=100; + static Sample staticSamSub1 = new Sample("子类 静态成员 staticSamSub1 初始化"); + + Son() { + System.out.println("子类无参数构造函数"+number); + System.out.println("子类 默认构造函数被调用"); + } + + public Son(int number) { + System.out.println("子类有参数构造函数"+number); //此方法的number值是在构造函数初始化以后执行的 + this.number = number; + System.out.println("子类有参数构造函数"+number); + + } + Sample sam1 = new Sample("子类 普通成员 sam1 初始化"); + static Sample staticSamSub2 = new Sample("子类 静态成员 staticSamSub2 初始化"); + + static { + System.out.println("子类 static块1 执行"); + } + + Sample sam2 = new Sample("子类 普通成员 sam2 初始化"); + + { + System.out.println("子类 非静态块 2 执行"); + } + + static { + System.out.println("子类 static块2 执行"); + } +} + +class Sample { + Sample(String s) { + System.out.println(s); + } + + Sample() { + System.out.println("Sample默认构造函数被调用"); + } +} diff --git a/java-base/src/main/java/com/brianway/learning/java/base/constructor/InitialOrderWithoutExtend.java b/java-base/src/main/java/com/brianway/learning/java/base/constructor/InitialOrderWithoutExtend.java new file mode 100644 index 0000000..3cfeea7 --- /dev/null +++ b/java-base/src/main/java/com/brianway/learning/java/base/constructor/InitialOrderWithoutExtend.java @@ -0,0 +1,93 @@ +package com.brianway.learning.java.base.constructor; + + +/* +* +* 由输出结果可知,执行顺序为: +* static静态代码块和静态成员 +* 普通成员,普通块 +* 构造函数执行 +* 当具有多个静态成员和静态代码块或者多个普通成员时,初始化顺序和成员在程序中申明的顺序一致。 +* +* 注意到在该程序的静态代码块中,修改了静态成员sam的引用。 +* main()方法中创建了2个主类对象,但是由输出结果可知,静态成员和静态代码块只进行了一次初始化,并且新建的2个主类对象的静态成员sam.s是相同的。 +* 由此可知,类的静态成员和静态代码块在类加载中是最先进行初始化的,并且只进行一次。 +* 该类的多个实例共享静态成员,静态成员的引用指向程序最后所赋予的引用。 +*/ + +public class InitialOrderWithoutExtend { + static SampleClass sam = new SampleClass("静态成员sam初始化"); + SampleClass sam1 = new SampleClass("普通成员sam1初始化"); + static { + System.out.println("static块执行"); + if (sam == null) + System.out.println("sam is null"); + sam = new SampleClass("静态块内初始化sam成员变量"); + } + { + System.out.println("普通块执行"); + } + + SampleClass sam2 = new SampleClass("普通成员sam2初始化"); + + InitialOrderWithoutExtend() { + System.out.println("InitialOrderWithoutExtend默认构造函数被调用"); + } + + public static void main(String[] args) { + // 创建第1个主类对象 + System.out.println("第1个主类对象:"); + InitialOrderWithoutExtend ts = new InitialOrderWithoutExtend(); + + // 创建第2个主类对象 + System.out.println("第2个主类对象:"); + InitialOrderWithoutExtend ts2 = new InitialOrderWithoutExtend(); + + // 查看两个主类对象的静态成员: + System.out.println("2个主类对象的静态对象:"); + System.out.println("第1个主类对象, 静态成员sam.s: " + ts.sam); + System.out.println("第2个主类对象, 静态成员sam.s: " + ts2.sam); + } +} + +class SampleClass { + // SampleClass 不能包含任何主类InitialOrderWithoutExtend的成员变量 + // 否则导致循环引用,循环初始化,调用栈深度过大 + // 抛出 StackOverFlow 异常 + // static InitialOrderWithoutExtend iniClass1 = new InitialOrderWithoutExtend("静态成员iniClass1初始化"); + // InitialOrderWithoutExtend iniClass2 = new InitialOrderWithoutExtend("普通成员成员iniClass2初始化"); + + String s; + + SampleClass(String s) { + this.s = s; + System.out.println(s); + } + + SampleClass() { + System.out.println("SampleClass默认构造函数被调用"); + } + + @Override + public String toString() { + return this.s; + } +} + + +// 静态成员sam初始化 +// static块执行 +// 静态块内初始化sam成员变量 +// 第1个主类对象: +// 普通成员sam1初始化 +// 普通块执行 +// 普通成员sam2初始化 +// InitialOrderWithoutExtend默认构造函数被调用 +// 第2个主类对象: +// 普通成员sam1初始化 +// 普通块执行 +// 普通成员sam2初始化 +// InitialOrderWithoutExtend默认构造函数被调用 +// 2个主类对象的静态对象: +// 第1个主类对象, 静态成员sam.s: 静态块内初始化sam成员变量 +// 第2个主类对象, 静态成员sam.s: 静态块内初始化sam成员变量 \ No newline at end of file diff --git a/java-base/src/main/java/com/brianway/learning/java/base/constructor/SonClass.java b/java-base/src/main/java/com/brianway/learning/java/base/constructor/SonClass.java index 6ea4cb4..88aea3e 100644 --- a/java-base/src/main/java/com/brianway/learning/java/base/constructor/SonClass.java +++ b/java-base/src/main/java/com/brianway/learning/java/base/constructor/SonClass.java @@ -26,6 +26,7 @@ public SonClass() { public static void main(String[] args) { new SonClass("aaa"); + System.out.println("---------------------------------------"); new SonClass(); } diff --git a/java-base/src/main/java/com/brianway/learning/java/base/datatype/Boxing.java b/java-base/src/main/java/com/brianway/learning/java/base/datatype/Boxing.java index 8ac8da7..eab6a5a 100644 --- a/java-base/src/main/java/com/brianway/learning/java/base/datatype/Boxing.java +++ b/java-base/src/main/java/com/brianway/learning/java/base/datatype/Boxing.java @@ -19,7 +19,9 @@ public static void main(String[] args) { System.out.println(c == d); System.out.println(e == f); System.out.println(c == (a + b)); + System.out.println("------------------------------"); System.out.println(c.equals(a + b)); + System.out.println("------------------------------"); System.out.println(g == (a + b)); System.out.println(g.equals(a + b)); System.out.println(new Integer(2) == new Integer(2)); @@ -34,7 +36,7 @@ public static void main(String[] args) { true true 调用 equals(),比较的是值,而不是对象地址 true -false +false //x.equals(y)中默认先使用.instanceOf(x),不同直接return false; false 比较的是对象地址 */ \ No newline at end of file diff --git a/java-base/src/main/java/com/brianway/learning/java/base/datatype/IntegerChanger.java b/java-base/src/main/java/com/brianway/learning/java/base/datatype/IntegerChanger.java index 45326c8..f112ae2 100644 --- a/java-base/src/main/java/com/brianway/learning/java/base/datatype/IntegerChanger.java +++ b/java-base/src/main/java/com/brianway/learning/java/base/datatype/IntegerChanger.java @@ -17,12 +17,18 @@ public class IntegerChanger { public static void main(String[] args) { Integer a = 1, b = 2; + int c=3,d=4; System.out.println("before swap a = " + a + ", b = " + b); swap(a, b); System.out.println("after swap a = " + a + ", b = " + b); + System.out.println("-----------------------------------------"); + System.out.println("before swap c = " + c + ", d = " + d); + swap(c, d); + System.out.println("after swap c = " + c + ", d= " + d); - Integer c = 1; - System.out.println("(警告:Integer缓存被改了,代码里:Integer c = 1;) 实际c=" + c); + + Integer f = 1; + System.out.println("(警告:Integer缓存被改了,代码里:Integer f = 1;) 实际f=" + f); } public static void swap(Integer i1, Integer i2) { @@ -41,4 +47,9 @@ public static void swap(Integer i1, Integer i2) { } } + public static void swap(int a,int b){ + int temp=a; + a=b; + b=temp; + } } \ No newline at end of file diff --git a/java-base/src/main/java/com/brianway/learning/java/base/generics/GenericVarargs.java b/java-base/src/main/java/com/brianway/learning/java/base/generics/GenericVarargs.java index 1a64c5b..eef0f68 100755 --- a/java-base/src/main/java/com/brianway/learning/java/base/generics/GenericVarargs.java +++ b/java-base/src/main/java/com/brianway/learning/java/base/generics/GenericVarargs.java @@ -26,5 +26,5 @@ public static void main(String[] args) { /* Output: [A] [A, B, C] -[, A, B, C, D, E, F, F, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] +[A, B, C, D, E, F, F, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] *///:~ diff --git a/java-multithread/pom.xml b/java-multithread/pom.xml index c9f06fe..82caa81 100644 --- a/java-multithread/pom.xml +++ b/java-multithread/pom.xml @@ -16,6 +16,16 @@ junit junit + + org.springframework + spring-beans + 5.0.4.RELEASE + + + org.springframework + spring-context + 5.0.4.RELEASE + \ No newline at end of file diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/App.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/App.java new file mode 100644 index 0000000..7377dcf --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/App.java @@ -0,0 +1,14 @@ +package com.brianway.learning.java.concurrent.Future; + +/* + * Future模式实现原理(主要目的:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑) + * https://www.cnblogs.com/winkey4986/p/6203225.html + */ +public class App { + public static void main(String[] args) throws InterruptedException { + Client client = new Client(); + Data data =client.request("kenny"); + Thread.sleep(2000); + System.out.println("数据="+ data.getResult()); + } +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Client.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Client.java new file mode 100644 index 0000000..6fdcfe1 --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Client.java @@ -0,0 +1,16 @@ +package com.brianway.learning.java.concurrent.Future; + +public class Client { + + public Data request(final String str){ + final FutureData futureData = new FutureData(); + new Thread(new Runnable() { + @Override + public void run() { + RealData realData = new RealData(str); + futureData.setRealData(realData); + } + }).start(); + return futureData; + } +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Data.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Data.java new file mode 100644 index 0000000..6c6bf9b --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Data.java @@ -0,0 +1,5 @@ +package com.brianway.learning.java.concurrent.Future; + +public interface Data { + String getResult() throws InterruptedException; +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/FutureData.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/FutureData.java new file mode 100644 index 0000000..8ade892 --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/FutureData.java @@ -0,0 +1,27 @@ +package com.brianway.learning.java.concurrent.Future; + +import com.brianway.learning.java.concurrent.LiftOff; + +public class FutureData implements Data { + + private RealData realData =null; + private boolean isReady =false; + + public synchronized void setRealData(RealData realData) { + if (isReady){ + return; + } + this.realData=realData; + isReady=true; + notifyAll(); + this.realData = realData; + } + + @Override + public synchronized String getResult() throws InterruptedException { + if (!isReady){ + wait(); + } + return realData.getResult(); + } +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/RealData.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/RealData.java new file mode 100644 index 0000000..ad815c3 --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/RealData.java @@ -0,0 +1,22 @@ +package com.brianway.learning.java.concurrent.Future; + + +public class RealData implements Data{ + + protected String data; + + public RealData(String data) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + this.data = data; + System.out.println("data has been construct"); + } + + @Override + public String getResult() throws InterruptedException { + return data; + } +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/ReallyData.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/ReallyData.java new file mode 100644 index 0000000..ae9f942 --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/ReallyData.java @@ -0,0 +1,20 @@ +package com.brianway.learning.java.concurrent.Future; + +import java.util.concurrent.Callable; + +/* + *JDK自带的Future模式 + */ +public class ReallyData implements Callable { + protected String data; + + public ReallyData(String data) { + this.data = data; + } + + @Override + public Object call() throws Exception { + Thread.sleep(10000); + return data; + } +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Test.java b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Test.java new file mode 100644 index 0000000..b94babc --- /dev/null +++ b/java-multithread/src/main/java/com/brianway/learning/java/concurrent/Future/Test.java @@ -0,0 +1,17 @@ +package com.brianway.learning.java.concurrent.Future; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; + +public class Test { + public static void main(String[] args) throws InterruptedException, ExecutionException { + FutureTask futureTask = new FutureTask(new ReallyData("kenny")); + ExecutorService executorService = Executors.newFixedThreadPool(1); + executorService.submit(futureTask); + Thread.sleep(10000); + System.out.println("数据= " + futureTask.get()); + } + +} diff --git a/java-multithread/src/main/java/com/brianway/learning/java/multithread/communication/example7/producer.java b/java-multithread/src/main/java/com/brianway/learning/java/multithread/communication/example7/Producer.java similarity index 100% rename from java-multithread/src/main/java/com/brianway/learning/java/multithread/communication/example7/producer.java rename to java-multithread/src/main/java/com/brianway/learning/java/multithread/communication/example7/Producer.java diff --git a/java-multithread/src/main/java/com/kenny/Thread/AtomicDemo/AtomicDemo.java b/java-multithread/src/main/java/com/kenny/Thread/AtomicDemo/AtomicDemo.java new file mode 100644 index 0000000..1ff8e35 --- /dev/null +++ b/java-multithread/src/main/java/com/kenny/Thread/AtomicDemo/AtomicDemo.java @@ -0,0 +1,22 @@ +package com.kenny.Thread.AtomicDemo; + +import java.util.HashMap; +import java.util.concurrent.atomic.AtomicInteger; + +public class AtomicDemo implements Runnable { + private AtomicInteger number = new AtomicInteger(); + @Override + public void run() { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println(Thread.currentThread().getName()+" : "+getNumber()); + } + + public int getNumber() { + return number.getAndIncrement(); + } +} diff --git a/java-multithread/src/main/java/com/kenny/Thread/AtomicDemo/InsertSort.java b/java-multithread/src/main/java/com/kenny/Thread/AtomicDemo/InsertSort.java new file mode 100644 index 0000000..26478a8 --- /dev/null +++ b/java-multithread/src/main/java/com/kenny/Thread/AtomicDemo/InsertSort.java @@ -0,0 +1,39 @@ +package com.kenny.Thread.AtomicDemo; + + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.context.ApplicationContext; + +import java.util.Arrays; + +// 插入排序 +public class InsertSort { + + public static void sort(int[] numbers){ + + for(int i= 1;i=0 && numbers[preIndex]>current){ + numbers[preIndex+1]=numbers[preIndex]; + preIndex--; + } + numbers[preIndex+1]=current; + } + } + + public static void main(String [] args){ + int[] n= new int[]{6,1,7,4,10,2,4,9,3,8}; + String str = "abebaf"; + InsertSort.sort(n); + char[] c = str.toCharArray(); + for (int i=0;i list; + @Override + public void run() { + System.out.println("ThreadA is running"); + int i=1; + while (true) { + + if (this.isInterrupted()){ + System.out.println(currentThread().getName()+" isInterrupted, should be exit"); + break; + }else { + System.out.println("i ="+(i++)); + } + } + System.out.println("Thread is executed, Thread does not stopped"); + } +} diff --git a/java-multithread/src/main/java/com/kenny/Thread/ThreadB.java b/java-multithread/src/main/java/com/kenny/Thread/ThreadB.java new file mode 100644 index 0000000..18fbe88 --- /dev/null +++ b/java-multithread/src/main/java/com/kenny/Thread/ThreadB.java @@ -0,0 +1,8 @@ +package com.kenny.Thread; + +public class ThreadB implements Runnable { + @Override + public void run() { + System.out.println("ThreadB is running"); + } +} diff --git a/java-multithread/src/main/java/com/kenny/Thread/ThreadTest.java b/java-multithread/src/main/java/com/kenny/Thread/ThreadTest.java new file mode 100644 index 0000000..a41827c --- /dev/null +++ b/java-multithread/src/main/java/com/kenny/Thread/ThreadTest.java @@ -0,0 +1,33 @@ +package com.kenny.Thread; + +public class ThreadTest { + + public static void main(String[] args) throws InterruptedException { + new ThreadTest().start(); + } + public void start() throws InterruptedException { + +// 1.继承Thread类 + + try{ + Thread thread1 = new ThreadA(); + thread1.start(); + Thread.sleep(1000); + thread1.interrupt(); + }catch (InterruptedException e){ + System.out.println("end"); + } + +// 2. 直接创建匿名内部类 + Thread thread2 = new Thread(){ + @Override + public void run() { + System.out.println("Thread2 is start"); + } + }; + thread2.start(); +// 3.实现runnable接口,并 new Thread(Runnable runnable) + Thread thread3 = new Thread(new ThreadB()); + thread3.start(); + } +} diff --git a/java-multithread/src/main/java/com/kenny/Thread/VolatileDemo/ThreadDemo.java b/java-multithread/src/main/java/com/kenny/Thread/VolatileDemo/ThreadDemo.java new file mode 100644 index 0000000..a39500e --- /dev/null +++ b/java-multithread/src/main/java/com/kenny/Thread/VolatileDemo/ThreadDemo.java @@ -0,0 +1,23 @@ +package com.kenny.Thread.VolatileDemo; + +public class ThreadDemo implements Runnable { + private boolean flag =false; + @Override + public void run() { + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + flag =true; + System.out.println("flag = "+isFlag()); + } + + public void setFlag(boolean flag) { + this.flag = flag; + } + public boolean isFlag(){ + return flag; + } +} diff --git a/java-multithread/src/main/java/com/kenny/Thread/VolatileDemo/VolatileDemo.java b/java-multithread/src/main/java/com/kenny/Thread/VolatileDemo/VolatileDemo.java new file mode 100644 index 0000000..067972f --- /dev/null +++ b/java-multithread/src/main/java/com/kenny/Thread/VolatileDemo/VolatileDemo.java @@ -0,0 +1,14 @@ +package com.kenny.Thread.VolatileDemo; + +public class VolatileDemo { + public static void main(String[] args){ + ThreadDemo demo = new ThreadDemo(); + new Thread(demo).start(); + while(true){ + if (demo.isFlag()){ + System.out.println("+++++++++"); + break; + } + } + } +} diff --git a/java8/pom.xml b/java8/pom.xml index 6868bb2..7228afe 100644 --- a/java8/pom.xml +++ b/java8/pom.xml @@ -10,6 +10,13 @@ 4.0.0 java8 + + UTF-8 + UTF-8 + 1.8 + 1.8 + 4.11 + diff --git a/java8/src/main/java/com/brianway/learning/java8/effective/async/AsyncShop.java b/java8/src/main/java/com/brianway/learning/java8/effective/async/AsyncShop.java index d33bcef..e5216d8 100644 --- a/java8/src/main/java/com/brianway/learning/java8/effective/async/AsyncShop.java +++ b/java8/src/main/java/com/brianway/learning/java8/effective/async/AsyncShop.java @@ -19,7 +19,6 @@ public AsyncShop(String name) { this.name = name; random = new Random(name.charAt(0) * name.charAt(1) * name.charAt(2)); } - public Future getPrice(String product) { /* // 抛出 CompletableFuture 内的异常 CompletableFuture futurePrice = new CompletableFuture<>(); diff --git a/java8/src/main/java/com/brianway/learning/java8/function/Function.java b/java8/src/main/java/com/brianway/learning/java8/function/Function.java new file mode 100644 index 0000000..d769209 --- /dev/null +++ b/java8/src/main/java/com/brianway/learning/java8/function/Function.java @@ -0,0 +1,45 @@ +package com.brianway.learning.java8.function; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.Future; +import java.util.function.Consumer; +import java.util.function.Predicate; + +public class Function { + private static List filter(List list, Predicate predicate){ + List arrayList = new ArrayList<>(); + for (T t :list){ + if (predicate.test(t)){ + arrayList.add(t); + } + } + return arrayList; + + } + + private static void print(List list, Consumer consumer){ + for (T t: list){ + consumer.accept(t); + } + } + + @Test + public void test() { + List list=Arrays.asList("abc,","demo","name","film,"); + List result = filter(list,(String s)->s.endsWith(",")); + result.forEach(new Consumer() { + @Override + public void accept(String s) { + System.err.println(s); + } + }); + print(result,(String s)->{ + System.out.println(s.toUpperCase()); + }); + } +} diff --git a/netty/pom.xml b/netty/pom.xml new file mode 100644 index 0000000..27c2a27 --- /dev/null +++ b/netty/pom.xml @@ -0,0 +1,22 @@ + + + + java-learning + com.brianway.learning.java + 1.0-SNAPSHOT + + 4.0.0 + + netty + + + io.netty + netty-all + 4.1.25.Final + + + + + \ No newline at end of file diff --git a/netty/src/main/java/com/brianway/learning/netty/demo.java b/netty/src/main/java/com/brianway/learning/netty/demo.java new file mode 100644 index 0000000..82b0cfa --- /dev/null +++ b/netty/src/main/java/com/brianway/learning/netty/demo.java @@ -0,0 +1,6 @@ +package com.brianway.learning.netty; + +import io.netty.channel.ChannelInboundHandlerAdapter; + +public class demo extends ChannelInboundHandlerAdapter{ +} diff --git a/pom.xml b/pom.xml index 3982c6d..7959f3e 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,8 @@ java-io java8 java-jvm + algorithms + netty @@ -60,7 +62,6 @@ junit junit ${junit.version} - test