diff --git a/README.md b/README.md
index 8cf0f34..dbc8d41 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,57 @@
-# 参考文章
+## 参考文章
-[JavaEE基础(01):Servlet实现方式,生命周期执行过程](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484304&idx=1&sn=dd6b6852e35031dd07f70d441f3ddc85&chksm=fdf45728ca83de3e158597030cf46b1677eccf533f9e1412690cd64b0ec0cce544711ceabddb&token=1248678182&lang=zh_CN#rd)
-[JavaEE基础(02):Servlet核心API用法详解](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484309&idx=1&sn=fc8237aef2f246f85b978561f4b37e1e&chksm=fdf4572dca83de3b8affdf4a9a8c8b3c18e4c5203c3e663e0bfaeb53788d3e2d26fa829bb8c6&token=1248678182&lang=zh_CN#rd)
-[JavaEE基础(03):Http请求详解,握手挥手流程简介](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484318&idx=1&sn=125780e20ada2f3d1451a1563a1c1e6f&chksm=fdf45726ca83de30adc5956a16d16151825b37c0adf5350214899ade39fef47f17ee35b2390d&token=1248678182&lang=zh_CN#rd)
-[JavaEE基础(04):会话跟踪技术,Session和Cookie详解](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484325&idx=1&sn=a3c96cff45fac355d947dff9e7f5b9bf&chksm=fdf4571dca83de0b590bbc2864561c33b4b7af512d5b0dce86eca83170a23f007a1786d22f8c&token=362281359&lang=zh_CN#rd)
-[JavaEE基础(05):过滤器、监听器、拦截器,应用详解](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484330&idx=1&sn=2754da84764ba5db8bccb1112881af3e&chksm=fdf45712ca83de04848d00451ce473275514ec8e60786c6f8db355190b0360463eb10da6c94c&token=362281359&lang=zh_CN#rd)
-[JavaEE基础(06):Servlet整合C3P0数据库连接池](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484335&idx=1&sn=6755f997766ceb8b81c83201ba101553&chksm=fdf45717ca83de01b39de0f3e5ca15607d12960cf5f9e2df391bc6c6af0808018dd2b1969a73&token=362281359&lang=zh_CN#rd)
+### JVM虚拟机系列
+
+|序号|文章标题|
+|:---:|:---|
+|01|[虚拟机系列:JVM特点,基础结构与执行周期](https://mp.weixin.qq.com/s/6mODRDVrw6z1ok5hFWvi3A)|
+|02|[虚拟机系列:JVM类加载机制](https://mp.weixin.qq.com/s/buJo4c2K_9Y7qRUEp_l2kg)|
+|03|[虚拟机系列:JVM运行时数据区](https://mp.weixin.qq.com/s/CMvhvV5kwzijq2t9eqlsoA)|
+|04|[虚拟机系列:JVM执行引擎和垃圾回收](https://mp.weixin.qq.com/s/yN3q038pFnKN1hnBgO_Y6g)|
+
+### JavaSE基础篇
+
+|序号|文章标题|
+|:---:|:---|
+|01|[Java基础:基本数据类型,核心点整理](https://mp.weixin.qq.com/s/YwrBptAd2SrWefFIiN86Yw)|
+|02|[Java基础:特殊的String类,和相关扩展API](https://mp.weixin.qq.com/s/HI6yklzR118G2Y-rJzl47g)|
+|03|[Java基础:流程控制语句,和算法应用](https://mp.weixin.qq.com/s/K7VqhbOJ7nMrFtfQgUKY0Q)|
+
+### JavaSE并发篇
+
+|序号|文章标题|
+|:---:|:---|
+|01|[Java并发:线程的创建方式,状态周期管理](https://mp.weixin.qq.com/s/h0zuh364It-fDtQyYdzIwA)|
+|02|[Java并发:线程核心机制,基础概念扩展](https://mp.weixin.qq.com/s/nU5tbKuAiDf_LDu-8A4Etg)|
+|03|[Java并发:多线程并发访问,同步控制](https://mp.weixin.qq.com/s/xWhd3vgYPNp-Mm2lJpmFmA)|
+|04|[Java并发:线程间通信,等待/通知机制](https://mp.weixin.qq.com/s/WWbVjvkEqpddx605me9E-A)|
+|05|[Java并发:悲观锁和乐观锁机制](https://mp.weixin.qq.com/s/t6NshbuKwULPeLhTIhvmIg)|
+|06|[Java并发:Lock机制下API用法详解](https://mp.weixin.qq.com/s/F7TC-71kEIpG6VD2eF6NIw)|
+|07|[Java并发:Fork/Join框架机制详解](https://mp.weixin.qq.com/s/kk5q0mtBawCSa6365t3IWw)|
+|08|[Java并发:Executor线程池框架简介](https://mp.weixin.qq.com/s/jvOl-bxVC1e4L2O329OIyg)|
+
+### JavaEE基础篇
+
+|序号|文章标题|
+|:---:|:---|
+|01|[Servlet实现方式,生命周期执行过程](https://mp.weixin.qq.com/s/0YMhMX4ET1BxyGJi01grnw)|
+|02|[Servlet核心API用法详解](https://mp.weixin.qq.com/s/gC9xknmXLvC7WlwEpPSWXQ)|
+|03|[Http请求详解,握手挥手流程简介](https://mp.weixin.qq.com/s/IhrIdiLu2kxe2npgix8KTg)|
+|04|[会话跟踪技术,Session和Cookie详解](https://mp.weixin.qq.com/s/8cEgI49Tbb4ezxZEvEq8tg)|
+|05|[过滤器、监听器、拦截器,应用详解](https://mp.weixin.qq.com/s/CVhLyZ12BbT9kaclSpIrnw)|
+|06|[Servlet整合C3P0数据库连接池](https://mp.weixin.qq.com/s/I-KB6vAEwVMBAVAjEP2RmQ)|
+
+### 编程体系整理
+
+|序号|文章标题|
+|:---:|:---|
+|01|[编程体系结构:Java编程基础](https://mp.weixin.qq.com/s/8ZQdT8Gwyax51tV2yLYbBg)|
+|02|[编程体系结构:Java异常体系](https://mp.weixin.qq.com/s/yHCC-MwFtDda_y817CV2XA)|
+|03|[编程体系结构:Java集合容器](https://mp.weixin.qq.com/s/Bx_vusOPzyvg8EDwoubAOA)|
+|04|[编程体系结构:JavaIO流文件管理](https://mp.weixin.qq.com/s/EakhE835U-0v9diDRayspw)|
+|05|[编程体系结构:Java多线程并发](https://mp.weixin.qq.com/s/xCJlBFg9_wOmJz_THBNNeA)|
+|06|[编程体系结构:Java面向对象](https://mp.weixin.qq.com/s/OLmY3t8L4jDL6lg_8jWV2g)|
+|07|[编程体系结构:JavaEE之Web开发](https://mp.weixin.qq.com/s/ImM3juO6OhEkEdOZMH2N-g)|
持续更新中...
@@ -14,19 +60,27 @@
Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。
## 关于作者
-【公众号:知了一笑】 【知乎专栏】
-
+
+
+
+
+
+
+
+
+
+
+
## 推荐项目
-|项目名称|GitHub地址|GitEE地址|推荐指数|
-|:---|:---|:---|:---|
-|Java描述常用设计模式,算法,数据结构|[GitHub·点这里](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆|
-|Java基础、进阶、并发、面向对象、Web开发|[GitHub·点这里](https://github.com/cicadasmile/java-base-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆|
-|SpringCloud微服务架构实战综合案例|[GitHub·点这里](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·点这里](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆|
-|SpringCloud微服务基础组件案例详解|[GitHub·点这里](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·点这里](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆|
-|SpringCloud实现分库分表模式下数据库实时扩容|[GitHub·点这里](https://github.com/cicadasmile/cloud-shard-jdbc)|[GitEE·点这里](https://gitee.com/cicadasmile/cloud-shard-jdbc)|☆☆☆☆☆|
-|SpringBoot框架基础应用入门到进阶|[GitHub·点这里](https://github.com/cicadasmile/spring-boot-base)|[GitEE·点这里](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆|
-|SpringBoot框架整合开发常用中间件|[GitHub·点这里](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆|
-|Spring+Mvc框架基础案例详解|[GitHub·点这里](https://github.com/cicadasmile/spring-mvc-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/spring-mvc-parent)|☆☆|
-|Linux系统基础、运维,常用操作积累|[GitHub·点这里](https://github.com/cicadasmile/linux-system-base)|[GitEE·点这里](https://gitee.com/cicadasmile/linux-system-base)|☆☆☆|
+|序号|项目名称|GitHub地址|GitEE地址|推荐指数|
+|:---|:---|:---|:---|:---|
+|01|Java描述设计模式,算法,数据结构|[GitHub·点这里](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆|
+|02|Java基础、并发、面向对象、Web开发|[GitHub·点这里](https://github.com/cicadasmile/java-base-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆|
+|03|SpringCloud微服务基础组件案例详解|[GitHub·点这里](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·点这里](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆|
+|04|SpringCloud微服务架构实战综合案例|[GitHub·点这里](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·点这里](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆|
+|05|SpringBoot框架基础应用入门到进阶|[GitHub·点这里](https://github.com/cicadasmile/spring-boot-base)|[GitEE·点这里](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆|
+|06|SpringBoot框架整合开发常用中间件|[GitHub·点这里](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆|
+|07|数据管理、分布式、架构设计基础案例|[GitHub·点这里](https://github.com/cicadasmile/data-manage-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/data-manage-parent)|☆☆☆☆☆|
+|08|大数据系列、存储、组件、计算等框架|[GitHub·点这里](https://github.com/cicadasmile/big-data-parent)|[GitEE·点这里](https://gitee.com/cicadasmile/big-data-parent)|☆☆☆☆☆|
diff --git a/java-se-base-parent/model-data-type/pom.xml b/java-se-base-parent/model-data-type/pom.xml
new file mode 100644
index 0000000..923f5a2
--- /dev/null
+++ b/java-se-base-parent/model-data-type/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ java-se-base-parent
+ com.java.se.parent
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ com.data.type
+ model-data-type
+
+
+
\ No newline at end of file
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/HelloDataType.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/HelloDataType.java
new file mode 100644
index 0000000..43f1baf
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/HelloDataType.java
@@ -0,0 +1,7 @@
+package com.data.type;
+
+public class HelloDataType {
+ public static void main(String[] args) {
+ System.out.println("基础数据类型模块");
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType01.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType01.java
new file mode 100644
index 0000000..41a065a
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType01.java
@@ -0,0 +1,12 @@
+package com.data.type.block01base;
+
+public class IntType01 {
+ public static void main(String[] args) {
+ System.out.println("进制位数:"+Integer.SIZE);
+ System.out.println("最小值:"+Integer.MIN_VALUE);
+ System.out.println("最大值:"+Integer.MAX_VALUE);
+ System.out.println("进制位数:"+Double.SIZE);
+ System.out.println("最小值:"+Double.MIN_VALUE);
+ System.out.println("最大值:"+Double.MAX_VALUE);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType02.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType02.java
new file mode 100644
index 0000000..3297a94
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType02.java
@@ -0,0 +1,18 @@
+package com.data.type.block01base;
+
+
+public class IntType02 {
+ public static void main(String[] args) {
+ // 自动转换
+ int i = 112 ;
+ long j = i ;
+ System.out.println(j);
+ // 强制转换
+ double d = 13.14 ;
+ int f = (int)d;
+ System.out.println(f);
+ // 类型提升
+ long r = i * j ;
+ System.out.println(r);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType03.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType03.java
new file mode 100644
index 0000000..52404ba
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType03.java
@@ -0,0 +1,9 @@
+package com.data.type.block01base;
+
+public class IntType03 {
+ public static void main(String[] args) {
+ Integer int1 = null ;
+ Double dou1 = 13.14 ;
+ Long lon1 = 123L ;
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType04.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType04.java
new file mode 100644
index 0000000..290d530
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType04.java
@@ -0,0 +1,8 @@
+package com.data.type.block01base;
+
+public class IntType04 {
+ public static void main(String[] args) {
+ char cha1 = '知';
+ System.out.println(cha1);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType05.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType05.java
new file mode 100644
index 0000000..0e359bd
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType05.java
@@ -0,0 +1,10 @@
+package com.data.type.block01base;
+
+public class IntType05 {
+ public static void main(String[] args) {
+ short s1 = 1 ;
+ // s1 = s1 + 1 ; // 变异错误:s1自动向int类型转换
+ s1 += 1 ;
+ System.out.println(s1);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType06.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType06.java
new file mode 100644
index 0000000..8cafae5
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType06.java
@@ -0,0 +1,12 @@
+package com.data.type.block01base;
+
+public class IntType06 {
+ public static void main(String[] args) {
+ // 存在精度损失问题:0.30000000000000004
+ System.out.println(3*0.1);
+ // true
+ System.out.println(0.3 == 0.3);
+ // false
+ System.out.println(3*0.1 == 0.3);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType07.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType07.java
new file mode 100644
index 0000000..3a2383b
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType07.java
@@ -0,0 +1,13 @@
+package com.data.type.block01base;
+
+public class IntType07 {
+ public static void main(String[] args) {
+ // float 声明
+ float f1 = 12.3f ;
+ // double 声明
+ double d1 = 13.4 ;
+ // 向下转型,需要强制转换
+ float f2 = (float) d1 ;
+ System.out.println("f1="+f1+";d1="+d1+";f2="+f2);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType08.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType08.java
new file mode 100644
index 0000000..6c30db5
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block01base/IntType08.java
@@ -0,0 +1,25 @@
+package com.data.type.block01base;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+public class IntType08 {
+ public static void main(String[] args) {
+ BigDecimal dec1 = new BigDecimal(3.0) ;
+ BigDecimal dec2 = new BigDecimal(2.11) ;
+ // 精确加法运算
+ BigDecimal res1 = dec1.add(dec2) ;
+ System.out.println(res1);
+ // 精确减法运算,并截取结果
+ // HALF_UP:四舍五入
+ BigDecimal res2 = dec1.subtract(dec2);
+ System.out.println(res2.setScale(1, RoundingMode.HALF_UP));
+ // 精确乘法运算
+ BigDecimal res3 = dec1.multiply(dec2) ;
+ System.out.println(res3.doubleValue());
+ // 精确除法运算,并截取结果
+ // ROUND_DOWN:直接按保留位数截取
+ BigDecimal res4 = dec1.divide(dec2,2,BigDecimal.ROUND_DOWN);
+ System.out.println(res4);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String01.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String01.java
new file mode 100644
index 0000000..35f6bb2
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String01.java
@@ -0,0 +1,11 @@
+package com.data.type.block02string;
+
+/**
+ * 字符串声明
+ */
+public class String01 {
+ public static void main(String[] args) {
+ String var1 = "cicada" ;
+ String var2 = new String("smile") ;
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String02.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String02.java
new file mode 100644
index 0000000..a46711b
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String02.java
@@ -0,0 +1,25 @@
+package com.data.type.block02string;
+
+public class String02 {
+ public static void main(String[] args) {
+ String var1 = "cicada" ;
+ String var2 = "cicada" ;
+ // true;true
+ System.out.println((var1==var2)+";"+var1.equals(var2));
+ String var3 = new String("cicada");
+ String var4 = new String("cicada");
+ // false;true
+ System.out.println((var3==var4)+";"+var3.equals(var4));
+ // false;true
+ System.out.println((var1==var4)+";"+var2.equals(var4));
+ String var5 = "ci"+"cada";
+ // true;true
+ System.out.println((var1==var5)+";"+var5.equals(var4));
+ String var6 = new String02().getVar6 () ;
+ // true;true
+ System.out.println((var1==var6)+";"+var6.equals(var4));
+ }
+ public String getVar6 (){
+ return "cicada" ;
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String03.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String03.java
new file mode 100644
index 0000000..38b77fd
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String03.java
@@ -0,0 +1,26 @@
+package com.data.type.block02string;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+public class String03 {
+ public static void main(String[] args) throws Exception {
+ String value = "Hello,知了";
+ // UTF-8
+ byte[] defaultCharset = value.getBytes(Charset.defaultCharset());
+ System.out.println(Arrays.toString(defaultCharset));
+ System.out.println(new String(defaultCharset,"UTF-8"));
+ // GBK
+ byte[] gbkCharset = value.getBytes("GBK");
+ System.out.println(Arrays.toString(gbkCharset));
+ System.out.println(new String(gbkCharset,"GBK"));
+ // ISO-8859-1:表示的字符范围很窄,无法表示中文字符,转换之后无法解码
+ byte[] isoCharset = value.getBytes("ISO8859-1");
+ System.out.println(Arrays.toString(isoCharset));
+ System.out.println(new String(isoCharset,"ISO8859-1"));
+ // UTF-16
+ byte[] utf16Charset = value.getBytes("UTF-16");
+ System.out.println(Arrays.toString(utf16Charset));
+ System.out.println(new String(utf16Charset,"UTF-16"));
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String04.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String04.java
new file mode 100644
index 0000000..6c4f66a
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String04.java
@@ -0,0 +1,22 @@
+package com.data.type.block02string;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class String04 {
+ public static void main(String[] args) {
+ // 指定位置拼接字符串
+ String var1 = formatStr("cicada","smile");
+ System.out.println("var1="+var1);
+ // 格式化日期:2020-03-07
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Date date = new Date() ;
+ System.out.println(format.format(date));
+ // 浮点数:此处会四舍五入
+ double num = 3.14159;
+ System.out.print(String.format("浮点类型:%.3f %n", num));
+ }
+ public static String formatStr (String ...var){
+ return String.format("key:%s:route:%s",var);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String05.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String05.java
new file mode 100644
index 0000000..5237992
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String05.java
@@ -0,0 +1,17 @@
+package com.data.type.block02string;
+
+public class String05 {
+ String var1 = "hello" ;
+ int[] intArr = {1,2,3};
+ public static void main(String[] args) {
+ String05 objStr = new String05() ;
+ objStr.change(objStr.var1,objStr.intArr);
+ // hello 4
+ System.out.println(objStr.var1);
+ System.out.println(objStr.intArr[2]);
+ }
+ public void change (String var1,int[] intArr){
+ var1 = "world" ;
+ intArr[2] = 4 ;
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String06.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String06.java
new file mode 100644
index 0000000..0e13a29
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String06.java
@@ -0,0 +1,15 @@
+package com.data.type.block02string;
+
+import java.util.UUID;
+
+public class String06 {
+ public static void main(String[] args) {
+ System.out.println(StringUtil.getUUid());
+ }
+}
+class StringUtil {
+ private StringUtil(){}
+ public static String getUUid (){
+ return UUID.randomUUID().toString().replace("-","");
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String07.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String07.java
new file mode 100644
index 0000000..61cdf1c
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String07.java
@@ -0,0 +1,10 @@
+package com.data.type.block02string;
+
+public class String07 {
+ public static void main(String[] args) {
+ StringBuffer var = new StringBuffer(2) ;
+ var.append("what");
+ var.append("when");
+ System.out.println(var);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String08.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String08.java
new file mode 100644
index 0000000..f4b210d
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String08.java
@@ -0,0 +1,9 @@
+package com.data.type.block02string;
+
+public class String08 {
+ public static void main(String[] args) {
+ StringBuilder var = new StringBuilder() ;
+ var.append("how").append("what") ;
+ System.out.println(var);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String09.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String09.java
new file mode 100644
index 0000000..6ff506d
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block02string/String09.java
@@ -0,0 +1,24 @@
+package com.data.type.block02string;
+
+public class String09 {
+ public static void main(String[] args) {
+ String var1 = new String("A");
+ String var2 = new String("B");
+ StringBuffer var3 = new StringBuffer("C");
+ StringBuffer var4 = new StringBuffer("D");
+ join(var1,var2);
+ join(var3,var4);
+ //A<>B
+ System.out.println(var1+"<>"+var2);
+ //C<>DD
+ System.out.println(var3+"<>"+var4);
+ }
+ public static void join (String s1,String s2){
+ s1 = s2 ;
+ s2 = s1+s2 ;
+ }
+ public static void join (StringBuffer s1,StringBuffer s2){
+ s1 = s2 ;
+ s2 = s2.append(s1) ;
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process01.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process01.java
new file mode 100755
index 0000000..5544b40
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process01.java
@@ -0,0 +1,45 @@
+package com.data.type.block03process;
+
+/**
+ * if...else 流程控制
+ */
+public class Process01 {
+ public static void main(String[] args) {
+ // 演示:Node01
+ if (compare01(40,30)){
+ System.out.println("40>30:true");
+ } else {
+ System.out.println("40>30:false");
+ }
+ // 演示:Node02
+ if (compare01(10,20) && compare01(20,30)){
+ System.out.println("条件成立");
+ } else {
+ System.out.println("条件不成立");
+ }
+ // 演示:Node03
+ if (compare01(20,10) || compare01(20,30)){
+ System.out.println("条件成立");
+ } else {
+ System.out.println("条件不成立");
+ }
+ // 演示:Node04
+ if(compare02(1,1))
+ if(compare02(2,2))
+ System.out.println("Running...");
+ // 演示:Node05
+ if(compare01(1,2))
+ if(compare01(5,3)){
+ System.out.println("5>3");
+ }
+ }
+
+ private static boolean compare01 (int num1,int num2){
+ System.out.println("判断:num1="+num1+";num2="+num2);
+ return num1 > num2 ;
+ }
+ private static boolean compare02 (int num1,int num2){
+ System.out.println("判断:num1="+num1+";num2="+num2);
+ return num1 == num2 ;
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process02.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process02.java
new file mode 100755
index 0000000..7ee87aa
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process02.java
@@ -0,0 +1,24 @@
+package com.data.type.block03process;
+
+/**
+ * else...if 语句
+ */
+public class Process02 {
+ public static void main(String[] args) {
+ elseIf(11) ;
+ elseIf(9) ;
+ elseIf(5);
+ }
+
+ private static void elseIf (Integer num){
+ if (num > 10){
+ System.out.println("num > 10");
+ } else if (num > 7){
+ System.out.println("num > 7");
+ } else if (num > 4){
+ System.out.println("num > 4");
+ } else {
+ System.out.println("num < 4");
+ }
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process03.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process03.java
new file mode 100755
index 0000000..f481ee0
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process03.java
@@ -0,0 +1,45 @@
+package com.data.type.block03process;
+
+import java.util.Scanner;
+
+/**
+ * Switch 语句
+ */
+public class Process03 {
+
+ public static void main(String[] args) {
+ Scanner scan = new Scanner(System.in);
+ System.out.print("What day is it today:");
+ String value = scan.next();
+ weekInfo(value);
+ }
+
+ private static void weekInfo (String value){
+ switch (value) {
+ case "Monday":
+ System.out.println("Monday");
+ break;
+ case "Tuesday":
+ System.out.println("Tuesday");
+ break;
+ case "Wednesday":
+ System.out.println("Wednesday");
+ break;
+ case "Thursday":
+ System.out.println("Thursday");
+ break;
+ case "Friday":
+ System.out.println("Friday");
+ break;
+ case "Saturday":
+ System.out.println("Saturday");
+ break;
+ case "Sunday":
+ System.out.println("Sunday");
+ break;
+ default:
+ System.out.println("Matching failure");
+ break;
+ }
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process04.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process04.java
new file mode 100755
index 0000000..4424d2e
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process04.java
@@ -0,0 +1,33 @@
+package com.data.type.block03process;
+
+/**
+ * for 循环
+ */
+public class Process04 {
+ public static void main(String[] args) {
+ // Node01
+ int sum = 0;
+ for(int i=1; i<=100; i++) {
+ sum += i;
+ }
+ System.out.println(sum);
+
+ // Node02
+ String[] nameArr = {"Java","C++","C#"} ;
+ for (String name:nameArr){
+ System.out.println("name="+name);
+ }
+
+ // Node03
+ // 输出 i = 13
+ int i = 0;
+ for (i++; i++ < 10; i++);
+ System.out.println(++i);
+
+ // 输出:j=3 6 9
+ int j = 0;
+ for (j++; j++ < 10; j++){
+ System.out.println(++j);
+ }
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process05.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process05.java
new file mode 100755
index 0000000..a136276
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process05.java
@@ -0,0 +1,23 @@
+package com.data.type.block03process;
+
+/**
+ * while 和 do while
+ */
+public class Process05 {
+ public static void main(String[] args) {
+ int num1 = 1;
+ int num2 = 1;
+
+ // while循环
+ while(num1 <= 3) {
+ System.out.println("num1 == " + num1);
+ num1++;
+ }
+
+ // do...while循环
+ do {
+ System.out.println("num2 == " + num2);
+ num2++;
+ } while(num2 <= 3);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process06.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process06.java
new file mode 100755
index 0000000..eea8ec2
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process06.java
@@ -0,0 +1,31 @@
+package com.data.type.block03process;
+
+/**
+ * Return 语句
+ */
+public class Process06 {
+ public static void main(String[] args) {
+ System.out.println(getNum1());
+ System.out.println(getNum2());
+ }
+ public static int getNum1 (){
+ int a =100;
+ try{
+ return a+1; // 这里是运算逻辑,非赋值
+ }catch(Exception e){
+ e.printStackTrace();
+ }finally{
+ return a;
+ }
+ }
+ public static int getNum2 (){
+ int a =100;
+ try{
+ return a++; // a++ -> a=a+1 此时a的值改变
+ }catch(Exception e){
+ e.printStackTrace();
+ }finally{
+ return a;
+ }
+ }
+}
\ No newline at end of file
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process07.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process07.java
new file mode 100755
index 0000000..134bd46
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process07.java
@@ -0,0 +1,15 @@
+package com.data.type.block03process;
+
+/**
+ * break 语句
+ */
+public class Process07 {
+ public static void main(String[] args) {
+ for (int i = 1 ; i < 3 ; i++){
+ if (i == 2){
+ break ;
+ }
+ System.out.println("i = " + i);
+ }
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process08.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process08.java
new file mode 100755
index 0000000..4731cb1
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process08.java
@@ -0,0 +1,15 @@
+package com.data.type.block03process;
+
+/**
+ * Continue 语句
+ */
+public class Process08 {
+ public static void main(String[] args) {
+ for (int i = 1 ; i < 3 ; i++){
+ if (i == 1){
+ continue ;
+ }
+ System.out.println("i = " + i);
+ }
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process09.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process09.java
new file mode 100755
index 0000000..36cfe33
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process09.java
@@ -0,0 +1,23 @@
+package com.data.type.block03process;
+
+public class Process09 {
+ public static void main(String[] args) {
+ int[] score = {9,8,7,6,5} ;
+ // 排序次数:最多 length - 1 次
+ for (int i = 0 ; i < score.length -1 ; i ++){
+ // 当前排序的集合区间,排序完一个数据就放弃一个
+ for (int j = 0 ; j < score.length - i - 1 ; j++){
+ // 冒泡排序:把结果大的向后扔
+ if (score[j] > score[j+1]){
+ int temp = score[j] ;
+ score[j] = score[j+1] ;
+ score[j+1] = temp ;
+ }
+ }
+ }
+ // 输出排序后的结果集
+ for (int i = 0 ; i < score.length ; i++){
+ System.out.print(score[i]);
+ }
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process10.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process10.java
new file mode 100755
index 0000000..f39b38a
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process10.java
@@ -0,0 +1,31 @@
+package com.data.type.block03process;
+
+/**
+ * 排列组合
+ */
+public class Process10 {
+ public static void main(String[] args) {
+ arrange() ;
+ }
+ /**
+ * 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
+ */
+ public static void arrange (){
+ int i=0; // 百位数
+ int j=0; // 十位数
+ int k=0; // 个位数
+ int t=0; // 计数器
+ for (i = 1 ; i <= 4 ; i++){
+ for (j = 1 ; j <= 4 ; j++){
+ for (k = 1 ; k <=4 ; k++){
+ if (i != j && j != k && k != i){
+ t += 1 ;
+ System.out.print(i*100+j*10+k+"--");
+ }
+ }
+ }
+ }
+ System.out.println();
+ System.out.println("t="+t);
+ }
+}
diff --git a/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process11.java b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process11.java
new file mode 100755
index 0000000..db605cd
--- /dev/null
+++ b/java-se-base-parent/model-data-type/src/main/java/com/data/type/block03process/Process11.java
@@ -0,0 +1,48 @@
+package com.data.type.block03process;
+
+/**
+ * 递归算法
+ */
+public class Process11 {
+ public static void main(String[] args) {
+ System.out.println(getSumOne(100));
+ System.out.println(getSumTwo(30));
+ System.out.println(getSumThree(5));
+ }
+ /**
+ * 使用递归的方式计算1+2+...+100
+ */
+ public static int getSumOne (int i){ // 传入100
+ int sum ;
+ if (i == 1){
+ return 1 ;
+ }
+ else {
+ sum = i + getSumOne(i - 1) ;
+ }
+ return sum ;
+ }
+ /**
+ * 一列数的规则如下: 1、1、2、3、5、8、13、21、34...
+ * 求第30位数是多少, 用递归算法实现
+ */
+ public static int getSumTwo (int i){ // 传入第几位数下标
+ if (i <= 0){
+ return 0 ;
+ } else if (i == 1 || i == 2){ // 处理前面2位的1,1
+ return 1 ;
+ } else { // 当前位数是前两位之和
+ return getSumTwo(i - 1) + getSumTwo(i - 2) ;
+ }
+ }
+ /**
+ * 1*2*3*...*100 递归计算阶乘
+ */
+ public static int getSumThree (int i){
+ if (i == 1){
+ return i ;
+ } else {
+ return i * getSumThree (i - 1) ;
+ }
+ }
+}
diff --git a/java-se-base-parent/model-multy-thread/pom.xml b/java-se-base-parent/model-multy-thread/pom.xml
new file mode 100644
index 0000000..efa2379
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ java-se-base-parent
+ com.java.se.parent
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ com.multy.thread
+ model-multy-thread
+
+
+ ${project.artifactId}
+
+
+ src/main/resources
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.3.2
+
+ 1.8
+ 1.8
+
+
+
+
+
\ No newline at end of file
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/HelloThread.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/HelloThread.java
new file mode 100644
index 0000000..e59982d
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/HelloThread.java
@@ -0,0 +1,24 @@
+package com.multy.thread;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+import java.lang.management.ThreadMXBean;
+
+/**
+ * 多线程入门案例
+ */
+public class HelloThread {
+ public static void main(String[] args) {
+ System.out.println("Hello,Thread");
+ // 当前线程名称
+ System.out.println(Thread.currentThread().getName());
+ // 线程系统的管理接口
+ ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
+ long[] threadIds = threadMXBean.getAllThreadIds() ;
+ for (long id : threadIds) {
+ ThreadInfo threadInfo = threadMXBean.getThreadInfo(id) ;
+ System.out.println(threadInfo.getThreadId()+
+ ":"+threadInfo.getThreadName());
+ }
+ }
+}
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread01.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread01.java
new file mode 100644
index 0000000..b88142b
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread01.java
@@ -0,0 +1,21 @@
+package com.multy.thread.block01create;
+/**
+ * 线程创建方式一:继承Thread类
+ */
+public class CreateThread01 {
+ public static void main(String[] args) {
+ // 调用方法
+ MyThread1 myThread1 = new MyThread1() ;
+ myThread1.start();
+ }
+}
+class MyThread1 extends Thread {
+ // 设置线程名称
+ public MyThread1 (){
+ super("CicadaThread");
+ }
+ @Override
+ public void run() {
+ System.out.println(Thread.currentThread().getName());
+ }
+}
\ No newline at end of file
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread02.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread02.java
new file mode 100644
index 0000000..71451a7
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread02.java
@@ -0,0 +1,16 @@
+package com.multy.thread.block01create;
+/**
+ * 线程创建方式二:实现 Runnable 接口
+ */
+public class CreateThread02 {
+ public static void main(String[] args) {
+ Thread thread = new Thread(new MyThread2(),"MyThread2") ;
+ thread.start();
+ }
+}
+class MyThread2 implements Runnable {
+ @Override
+ public void run() {
+ System.out.println(Thread.currentThread().getName()+" run ...");
+ }
+}
\ No newline at end of file
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread03.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread03.java
new file mode 100644
index 0000000..f173908
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread03.java
@@ -0,0 +1,27 @@
+package com.multy.thread.block01create;
+/**
+ * 线程创建方式三:匿名内部类
+ */
+public class CreateThread03 {
+ public static void main(String[] args) {
+ //方式1
+ new Thread("ThreadName1") {
+ public void run() {
+ System.out.println("1:"+Thread.currentThread().getName());
+ };
+ }.start();
+
+ //方式2
+ new Thread(new Runnable() {
+ public void run() {
+ System.out.println("2:"+Thread.currentThread().getName());
+ }
+ },"ThreadName2"){
+ // 这里重写了run方法
+ @Override
+ public void run() {
+ System.out.println("3:"+Thread.currentThread().getName());
+ }
+ }.start();
+ }
+}
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread04.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread04.java
new file mode 100644
index 0000000..536abdd
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread04.java
@@ -0,0 +1,31 @@
+package com.multy.thread.block01create;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 线程创建方式四:返回值线程
+ */
+public class CreateThread04 {
+ public static void main(String[] args) throws Exception {
+ MyThread4 myThread4 = new MyThread4();
+ FutureTask task = new FutureTask<>(myThread4);
+ Thread thread = new Thread(task,"TaskThread");
+ thread.start();
+ // 等待获取结果
+ // Integer result = task.get();
+ // 设置获取结果的等待时间,超时抛出:TimeoutException
+ Integer result = task.get(3, TimeUnit.SECONDS) ;
+ System.out.println("result="+result);
+ }
+}
+class MyThread4 implements Callable {
+ // 封装线程执行的任务
+ @Override
+ public Integer call() throws Exception {
+ System.out.println(Thread.currentThread().getName());
+ Thread.sleep(1000);
+ return 2+3;
+ }
+}
\ No newline at end of file
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread05.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread05.java
new file mode 100644
index 0000000..aa4ecfe
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread05.java
@@ -0,0 +1,19 @@
+package com.multy.thread.block01create;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * 线程创建方式五:定时任务
+ */
+public class CreateThread05 {
+ public static void main(String[] args) {
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ System.out.println("延迟1s,每隔3s执行一次");
+ }
+ }, 1000, 3000);
+ }
+}
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread06.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread06.java
new file mode 100644
index 0000000..7625da0
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/CreateThread06.java
@@ -0,0 +1,21 @@
+package com.multy.thread.block01create;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+/**
+ * 线程创建方式六:线程池
+ */
+public class CreateThread06 {
+ public static void main(String[] args) {
+ Executor threadPool = Executors.newFixedThreadPool(5);
+ for(int i = 0 ;i < 5 ; i++) {
+ threadPool.execute(new Runnable() {
+ @Override
+ public void run() {
+ System.out.println(Thread.currentThread().getName());
+ }
+ });
+ }
+ }
+}
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/StateCycle01.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/StateCycle01.java
new file mode 100644
index 0000000..811ae11
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block01create/StateCycle01.java
@@ -0,0 +1,49 @@
+package com.multy.thread.block01create;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 线程状态和周期
+ */
+public class StateCycle01 {
+ public static void main(String[] args) throws Exception {
+ // 进入初始状态
+ StateThread01 stateThread01 = new StateThread01();
+ FutureTask task = new FutureTask<>(stateThread01);
+ Thread thread = new Thread(task,"GetValueThread");
+ // 运行状态
+ thread.start();
+ // 超时等待结果
+ String result = task.get(3, TimeUnit.SECONDS) ;
+ System.out.println("result="+result);
+
+ StateThread02 stateThread02 = new StateThread02() ;
+ Thread thread1 = new Thread(stateThread02,"WaitThread");
+ thread1.start();
+ }
+}
+class StateThread01 implements Callable {
+ @Override
+ public String call() throws Exception {
+ // 超时等待
+ Thread.sleep(1000);
+ return "Hello,Cicada";
+ }
+}
+class StateThread02 implements Runnable {
+ @Override
+ public void run() {
+ synchronized (StateCycle01.class) {
+ System.out.println("进入线程...");
+ try {
+ // 等待状态,放弃对象锁
+ StateCycle01.class.wait(2000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ System.out.println("线程继续...");
+ }
+ }
+}
\ No newline at end of file
diff --git a/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block02extend/ExtendThread01.java b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block02extend/ExtendThread01.java
new file mode 100644
index 0000000..5bb0fd4
--- /dev/null
+++ b/java-se-base-parent/model-multy-thread/src/main/java/com/multy/thread/block02extend/ExtendThread01.java
@@ -0,0 +1,50 @@
+package com.multy.thread.block02extend;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExtendThread01 {
+ public static void main(String[] args) {
+ List