diff --git a/corejava/corejava.iml b/corejava/corejava.iml
index c035f0b..befcf3b 100644
--- a/corejava/corejava.iml
+++ b/corejava/corejava.iml
@@ -11,5 +11,8 @@
+
+
+
\ No newline at end of file
diff --git a/corejava/pom.xml b/corejava/pom.xml
index 142eb9e..817d8d9 100644
--- a/corejava/pom.xml
+++ b/corejava/pom.xml
@@ -11,5 +11,25 @@
corejava
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ com.alibaba
+ fastjson
+ 1.2.55
+
+
+
+ com.google.code.gson
+ gson
+
+
+
+
\ No newline at end of file
diff --git a/corejava/src/main/java/com/zz/classdemo/ClassDTO.java b/corejava/src/main/java/com/zz/classdemo/ClassDTO.java
new file mode 100644
index 0000000..29e08d0
--- /dev/null
+++ b/corejava/src/main/java/com/zz/classdemo/ClassDTO.java
@@ -0,0 +1,16 @@
+package com.zz.classdemo;
+
+import lombok.Data;
+
+import java.util.Set;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/25$ 21:44$
+ */
+@Data
+public class ClassDTO {
+ private String name;
+ private String students;
+}
diff --git a/corejava/src/main/java/com/zz/classdemo/ClassMaster.java b/corejava/src/main/java/com/zz/classdemo/ClassMaster.java
new file mode 100644
index 0000000..e4a67e1
--- /dev/null
+++ b/corejava/src/main/java/com/zz/classdemo/ClassMaster.java
@@ -0,0 +1,18 @@
+package com.zz.classdemo;
+
+import lombok.Data;
+
+import java.util.Set;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/25$ 21:42$
+ */
+@Data
+public class ClassMaster {
+ private String name;
+ private Set students;
+
+
+}
diff --git a/corejava/src/main/java/com/zz/classdemo/Student.java b/corejava/src/main/java/com/zz/classdemo/Student.java
new file mode 100644
index 0000000..c6117e8
--- /dev/null
+++ b/corejava/src/main/java/com/zz/classdemo/Student.java
@@ -0,0 +1,38 @@
+package com.zz.classdemo;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/25$ 21:28$
+ */
+public class Student {
+
+ private String name;
+
+ private Integer age;
+
+ public Student() {
+
+ }
+
+ public Student(String name,Integer age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getAge() {
+ return age;
+ }
+
+ public void setAge(Integer age) {
+ this.age = age;
+ }
+}
diff --git a/corejava/src/main/java/com/zz/classdemo/Test.java b/corejava/src/main/java/com/zz/classdemo/Test.java
new file mode 100644
index 0000000..d7db709
--- /dev/null
+++ b/corejava/src/main/java/com/zz/classdemo/Test.java
@@ -0,0 +1,148 @@
+package com.zz.classdemo;
+
+import com.zz.thread.Count;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/25$ 21:21$
+ */
+public class Test {
+ public static void main(String[] args) {
+// Count count=new Count();
+// Class c=count.getClass();
+// //利用反射 获取一个类的所有属性
+// Field[] fs=c.getDeclaredFields();
+// for(Field field:fs){
+// System.out.println(field.getName());
+// }
+ try {
+ testConstructor();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
+ public static void testMethod() throws Exception {
+ Class aClass = (Class) Class.forName("com.zz.classdemo.Student");
+ //1.获取方法
+ // 获取取clazz对应类中的所有方法--方法数组(一)
+ // 不能获取private方法,并且获取从父类继承来的所有方法
+ Method[] methods = aClass.getMethods();
+ for (Method method:methods) {
+ System.out.println(method);
+ }
+ System.out.println("================================");
+ //2.获取方法
+ // 获取取clazz对应类中的所有方法--方法数组(一)
+ // 不能获取private方法,不获取从父类继承来的所有方法
+ Method[] declaredMethods = aClass.getDeclaredMethods();
+ for (Method method:declaredMethods) {
+ System.out.println(method);
+ }
+
+ System.out.println("=================================");
+ // 1.3.获取指定的方法
+ // 需要参数名称和参数列表,无参则不需要写
+ // 对于方法public void setName(String name) { }
+ Method method = aClass.getDeclaredMethod("setName", String.class);
+ System.out.println(method);
+ // 而对于方法public void setAge(int age) { }
+ method = aClass.getDeclaredMethod("setAge", Integer.class);
+ System.out.println(method);
+ // 这样写是获取不到的,如果方法的参数类型是int型
+ // 如果方法用于反射,那么要么int类型写成Integer: public void setAge(Integer age) { }
+ // 要么获取方法的参数写成int.class
+
+ //2.执行方法
+ // invoke第一个参数表示执行哪个对象的方法,剩下的参数是执行方法时需要传入的参数
+ Object obje = aClass.newInstance();
+ method.invoke(obje,2);
+
+ //如果一个方法是私有方法,第三步是可以获取到的,但是这一步却不能执行
+ //私有方法的执行,必须在调用invoke之前加上一句method.setAccessible(true);
+ }
+
+ /**
+ * 把类对象和类方法名作为参数,执行方法
+ *
+ * 把全类名和方法名作为参数,执行方法
+ * 可变参数可以放数组
+ * @param obj: 方法执行的那个对象.
+ * @param methodName: 类的一个方法的方法名. 该方法也可能是私有方法.
+ * @param args: 调用该方法需要传入的参数
+ * @return: 调用方法后的返回值
+ *
+ */
+ public Object invoke(Object obj, String methodName, Object ... args) throws Exception{
+ //1. 获取 Method 对象
+ // 因为getMethod的参数为Class列表类型,所以要把参数args转化为对应的Class类型。
+
+ Class [] parameterTypes = new Class[args.length];
+ for(int i = 0; i < args.length; i++){
+ parameterTypes[i] = args[i].getClass();
+ System.out.println(parameterTypes[i]);
+ }
+
+ Method method = obj.getClass().getDeclaredMethod(methodName, parameterTypes);
+ //如果使用getDeclaredMethod,就不能获取父类方法,如果使用getMethod,就不能获取私有方法
+
+ //
+ //2. 执行 Method 方法
+ //3. 返回方法的返回值
+ return method.invoke(obj, args);
+ }
+
+ public static void testField() throws Exception {
+ Class aClass = (Class) Class.forName("com.zz.classdemo.Student");
+ //1.获取字段
+ // 1.1 获取所有字段 -- 字段数组
+ // 可以获取公用和私有的所有字段,但不能获取父类字段
+ Field[] declaredFields = aClass.getDeclaredFields();
+ for (Field field:declaredFields) {
+ System.out.println(field);
+ }
+ System.out.println("=============================");
+ // 1.2获取指定字段
+ Field field = aClass.getDeclaredField("name");
+ System.out.println(field.getName());
+
+ System.out.println("==============================");
+
+ Student student = new Student();
+ //如果字段是私有的,不管是读值还是写值,都必须先调用setAccessible(true)方法
+ field.setAccessible(true);
+ student.setAge(1);
+ student.setName("张三");
+ //2.使用字段
+ // 2.1获取指定对象的指定字段的值
+ Object o = field.get(student);
+ System.out.println(o);
+ System.out.println("==========================");
+ // 2.2设置指定对象的指定对象Field值
+ field.set(student, "DEF");
+ System.out.println(student.getName());
+ }
+ public static void testConstructor() throws Exception{
+ Class aClass = (Class) Class.forName("com.zz.classdemo.Student");
+ //1. 获取 Constructor 对象
+ // 1.1 获取全部
+ Constructor>[] constructors = aClass.getConstructors();
+ for (Constructor constructor:constructors) {
+ System.out.println(constructor);
+ }
+ System.out.println("============================");
+ // 1.2获取某一个,需要参数列表
+ Constructor constructor = aClass.getConstructor(String.class, Integer.class);
+ System.out.println(constructor);
+ System.out.println("============================");
+ //2. 调用构造器的 newInstance() 方法创建对象
+ Object obj = constructor.newInstance("zhagn", 1);
+ }
+}
diff --git a/corejava/src/main/java/com/zz/classdemo/Test2.java b/corejava/src/main/java/com/zz/classdemo/Test2.java
new file mode 100644
index 0000000..660189c
--- /dev/null
+++ b/corejava/src/main/java/com/zz/classdemo/Test2.java
@@ -0,0 +1,17 @@
+package com.zz.classdemo;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/25$ 21:45$
+ */
+public class Test2 {
+ public static void main(String[] args) {
+ ClassDTO dto=new ClassDTO();
+ dto.setName("java10班");
+ dto.setStudents("[{name:\"张三\",age:21},{name:\"李四\",age:81}]");
+
+
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/proxy/HelloService.java b/corejava/src/main/java/com/zz/proxy/HelloService.java
new file mode 100644
index 0000000..250efb0
--- /dev/null
+++ b/corejava/src/main/java/com/zz/proxy/HelloService.java
@@ -0,0 +1,22 @@
+package com.zz.proxy;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/23$ 21:11$
+ */
+// 委托类
+public class HelloService implements IHelloService {
+
+ @Override
+ public String sayHello(String userName) {
+ System.out.println(userName + " hello");
+ return userName + " hello";
+ }
+
+ @Override
+ public String sayByeBye(String userName) {
+ System.out.println(userName + " ByeBye");
+ return userName + " ByeBye";
+ }
+}
diff --git a/corejava/src/main/java/com/zz/proxy/IHelloService.java b/corejava/src/main/java/com/zz/proxy/IHelloService.java
new file mode 100644
index 0000000..7a91229
--- /dev/null
+++ b/corejava/src/main/java/com/zz/proxy/IHelloService.java
@@ -0,0 +1,25 @@
+package com.zz.proxy;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/23$ 21:10$
+ */
+// 委托类接口
+public interface IHelloService {
+
+ /**
+ * 方法1
+ * @param userName
+ * @return
+ */
+ String sayHello(String userName);
+
+ /**
+ * 方法2
+ * @param userName
+ * @return
+ */
+ String sayByeBye(String userName);
+
+}
diff --git a/corejava/src/main/java/com/zz/proxy/JavaProxyInvocationHandler.java b/corejava/src/main/java/com/zz/proxy/JavaProxyInvocationHandler.java
new file mode 100644
index 0000000..b1ed406
--- /dev/null
+++ b/corejava/src/main/java/com/zz/proxy/JavaProxyInvocationHandler.java
@@ -0,0 +1,64 @@
+package com.zz.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/23$ 21:11$
+ */
+// 中间类
+public class JavaProxyInvocationHandler implements InvocationHandler {
+
+ /**
+ * 中间类持有委托类对象的引用,这里会构成一种静态代理关系
+ */
+ private Object obj ;
+
+ /**
+ * 有参构造器,传入委托类的对象
+ * @param obj 委托类的对象
+ */
+ public JavaProxyInvocationHandler(Object obj){
+ this.obj = obj;
+
+ }
+
+ /**
+ * 动态生成代理类对象,Proxy.newProxyInstance
+ * @return 返回代理类的实例
+ */
+ public Object newProxyInstance() {
+ return Proxy.newProxyInstance(
+ //指定代理对象的类加载器
+ obj.getClass().getClassLoader(),
+ //代理对象需要实现的接口,可以同时指定多个接口
+ obj.getClass().getInterfaces(),
+ //方法调用的实际处理者,代理对象的方法调用都会转发到这里
+ this);
+ }
+
+
+ /**
+ *
+ * @param proxy 代理对象
+ * @param method 代理方法
+ * @param args 方法的参数
+ * @return
+ * @throws Throwable
+ */
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ System.out.println("invoke before");
+ Object result = method.invoke(obj, args);
+ System.out.println("invoke after");
+ return result;
+ }
+
+// @Override
+// public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+// return null;
+// }
+}
diff --git a/corejava/src/main/java/com/zz/proxy/MainJavaProxy.java b/corejava/src/main/java/com/zz/proxy/MainJavaProxy.java
new file mode 100644
index 0000000..419daff
--- /dev/null
+++ b/corejava/src/main/java/com/zz/proxy/MainJavaProxy.java
@@ -0,0 +1,18 @@
+package com.zz.proxy;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/23$ 21:12$
+ */
+// 测试动态代理类
+public class MainJavaProxy {
+ public static void main(String[] args) {
+ JavaProxyInvocationHandler proxyInvocationHandler = new JavaProxyInvocationHandler(new HelloService());
+ IHelloService helloService = (IHelloService) proxyInvocationHandler.newProxyInstance();
+ helloService.sayByeBye("allen");
+ helloService.sayHello("jerry");
+ }
+
+}
+
diff --git a/corejava/src/main/java/com/zz/thread/A.java b/corejava/src/main/java/com/zz/thread/A.java
new file mode 100644
index 0000000..0585062
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/A.java
@@ -0,0 +1,18 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 19:14$
+ */
+public class A implements Runnable {
+ Count count;
+ public A(Count count99){
+ this.count=count99;
+ }
+ @Override
+ public void run() {
+ count.t1();
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/B.java b/corejava/src/main/java/com/zz/thread/B.java
new file mode 100644
index 0000000..3786487
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/B.java
@@ -0,0 +1,25 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 19:14$
+ */
+public class B implements Runnable {
+
+ Count count;
+ public B(Count count55){
+ this.count=count55;
+ }
+
+
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(5000);
+ this.count.t2();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Count.java b/corejava/src/main/java/com/zz/thread/Count.java
new file mode 100644
index 0000000..cc4e3d4
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Count.java
@@ -0,0 +1,49 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 16:52$
+ */
+public class Count {
+ public int balance=1000;
+ public String name;
+
+ public int getBalance(){
+ return this.balance;
+ }
+ public void reduce(int num) {
+ synchronized(this) {
+ if(num<=this.balance){
+
+ System.out.println("成功取出:" + num);
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ this.balance = this.balance - num;
+ }
+ }
+
+ }
+
+
+ public synchronized void t1(){
+ System.out.println("进入t1方法");
+ try {
+ wait();
+ System.out.println("t1方法被叫醒");
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
+ public synchronized void t2(){
+ notifyAll();
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Demo1.java b/corejava/src/main/java/com/zz/thread/Demo1.java
new file mode 100644
index 0000000..2966f37
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Demo1.java
@@ -0,0 +1,17 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:16$
+ */
+public class Demo1 implements Runnable{
+ @Override
+ public void run() {
+// System.out.println("run方法里面就是一个线程需要执行的任务");
+ for(int i=0;i<2000;i++){
+ System.out.println("**********demo1运行**********");
+ }
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Demo2.java b/corejava/src/main/java/com/zz/thread/Demo2.java
new file mode 100644
index 0000000..81a0b9c
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Demo2.java
@@ -0,0 +1,17 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:16$
+ */
+public class Demo2 implements Runnable{
+ @Override
+ public void run() {
+// System.out.println("run方法里面就是一个线程需要执行的任务");
+ for(int i=0;i<2000;i++){
+ System.out.println("@@@@@@@@@@@@demo2运行**********");
+ }
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Demo3.java b/corejava/src/main/java/com/zz/thread/Demo3.java
new file mode 100644
index 0000000..2474187
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Demo3.java
@@ -0,0 +1,22 @@
+package com.zz.thread;
+
+import java.util.Date;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:40$
+ */
+public class Demo3 implements Runnable{
+ @Override
+ public void run() {
+ try {
+ System.out.println("开始"+new Date());
+ //让当前线程睡3秒后执行
+ Thread.sleep(3000);
+ System.out.println("结束"+new Date());
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Demo4.java b/corejava/src/main/java/com/zz/thread/Demo4.java
new file mode 100644
index 0000000..1a127df
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Demo4.java
@@ -0,0 +1,21 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:16$
+ */
+public class Demo4 implements Runnable{
+ Task task;
+ public Demo4(Task task){
+ this.task=task;
+ }
+ @Override
+ public void run() {
+// System.out.println("run方法里面就是一个线程需要执行的任务");
+ for(int i=0;i<300;i++){
+ this.task.finishtask();
+ }
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Demo5.java b/corejava/src/main/java/com/zz/thread/Demo5.java
new file mode 100644
index 0000000..bf4c57f
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Demo5.java
@@ -0,0 +1,21 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:16$
+ */
+public class Demo5 implements Runnable{
+ Task task;
+ public Demo5(Task task){
+ this.task=task;
+ }
+ @Override
+ public void run() {
+// System.out.println("run方法里面就是一个线程需要执行的任务");
+ for(int i=0;i<300;i++){
+ this.task.finishtask();
+ }
+
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Demo6.java b/corejava/src/main/java/com/zz/thread/Demo6.java
new file mode 100644
index 0000000..4fd73fe
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Demo6.java
@@ -0,0 +1,14 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 16:04$
+ */
+public class Demo6 extends Thread {
+
+ public void run(){
+ System.out.println("线程demo6 运行");
+ }
+
+}
diff --git a/corejava/src/main/java/com/zz/thread/T1.java b/corejava/src/main/java/com/zz/thread/T1.java
new file mode 100644
index 0000000..c076f0f
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/T1.java
@@ -0,0 +1,19 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 16:55$
+ */
+public class T1 extends Thread {
+ Count count;
+ T1(Count c){
+ this.count=c;
+ }
+
+ public void run(){
+ count.reduce(1000);
+
+ System.out.println(count.getBalance());
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Task.java b/corejava/src/main/java/com/zz/thread/Task.java
new file mode 100644
index 0000000..6ac90de
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Task.java
@@ -0,0 +1,19 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:50$
+ */
+public class Task {
+ int total=600;
+ int runtime=0;
+
+ public void finishtask(){
+ //相当于this.total=this.total-1
+ this.total--;
+ this.runtime++;
+ System.out.println("total="+total+"****runtime="+runtime);
+ }
+
+}
diff --git a/corejava/src/main/java/com/zz/thread/Test.java b/corejava/src/main/java/com/zz/thread/Test.java
new file mode 100644
index 0000000..a17b486
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Test.java
@@ -0,0 +1,33 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/20$ 21:21$
+ */
+public class Test {
+
+ public static void main(String[] args) {
+// Demo1 demo1=new Demo1();
+// Thread t1=new Thread(demo1);
+// //启动一个线程是执行start方法
+// t1.start();
+//
+// Demo2 demo2=new Demo2();
+// Thread t2=new Thread(demo2);
+// t2.start();
+
+ Task task=new Task();
+
+ Demo4 demo4=new Demo4(task);
+ Thread t2=new Thread(demo4);
+ t2.start();
+
+ Demo5 demo5=new Demo5(task);
+ Thread t3=new Thread(demo5);
+ t3.start();
+
+ System.out.println("执行次数"+task.runtime);
+ System.out.println("任务总数"+task.total);
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Test2.java b/corejava/src/main/java/com/zz/thread/Test2.java
new file mode 100644
index 0000000..280756f
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Test2.java
@@ -0,0 +1,14 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 16:07$
+ */
+public class Test2 {
+
+ public static void main(String[] args) {
+ Demo6 demo6=new Demo6();
+ demo6.start();
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Test3.java b/corejava/src/main/java/com/zz/thread/Test3.java
new file mode 100644
index 0000000..1a881ef
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Test3.java
@@ -0,0 +1,18 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 16:58$
+ */
+public class Test3 {
+ public static void main(String[] args) {
+ Count count=new Count();
+
+ T1 t1=new T1(count);
+ T1 t2=new T1(count);
+
+ t1.start();
+ t2.start();
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Test4.java b/corejava/src/main/java/com/zz/thread/Test4.java
new file mode 100644
index 0000000..4a9b0ac
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Test4.java
@@ -0,0 +1,21 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 19:21$
+ */
+public class Test4 {
+
+ public static void main(String[] args) {
+ Count count2=new Count();
+
+ A a1=new A(count2);
+ B b=new B(count2);
+
+ Thread t1=new Thread(a1);
+ Thread t2=new Thread(b);
+ t1.start();
+ t2.start();
+ }
+}
diff --git a/corejava/src/main/java/com/zz/thread/Test5.java b/corejava/src/main/java/com/zz/thread/Test5.java
new file mode 100644
index 0000000..62f401f
--- /dev/null
+++ b/corejava/src/main/java/com/zz/thread/Test5.java
@@ -0,0 +1,49 @@
+package com.zz.thread;
+
+/**
+ * @Description: java类作用描述
+ * @Author: Bsea
+ * @CreateDate: 2019/9/21$ 20:35$
+ */
+public class Test5 {
+
+ public static void main(String[] args) {
+ Test5 test5=new Test5();
+ Thread t1=new Thread(
+ new Runnable(){
+
+ @Override
+ public void run() {
+ test5.t1();
+ }
+ }
+ );
+
+ Thread t2=new Thread(
+ new Runnable(){
+
+ @Override
+ public void run() {
+ test5.t2();
+ }
+ }
+ );
+
+ t1.start();
+ t2.start();
+ };
+ public synchronized void t1(){
+ try {
+ System.out.println("开始等待");
+ wait();
+ System.out.println("被叫醒");
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public synchronized void t2(){
+ System.out.println("开始叫醒");
+ notify();
+ }
+}