线程
-
三种创建方式
- Thread class(继承类)//需要重写run方法
- Runnable (接口)
- Callable(接口) !!!
-
主方法需要调度的是start方法,不是run方法
-
Callable接口的好处
- 可以定义返回值
- 可以抛出异常
-
静态代理模式:
- 真实对象和代理对象都要实现同一个接口
- 代理对象要代理真实角色
-
代理对象可以代替真实对象做事情
-
真实对象可以做自己喜欢做的事情
-
lamba表达式的符号表示为 ->,其基本结构形式为:(param1,param2,param3…)-> { }
如果只有一个参数,可以不加小括号,只有一行执行代码,也可以没有箭头后面的大括号,比如 i ->System.Out.Println(i);
如果没有参数 ,只需要一个小括号即可,比如:()-> System.Out.Println(“hello”);
表达式只能有一行代码的情况下,才能简化为一行如果有多行,必修用代码块包裹
前提是接口为函数式接口(接口只有一个方法)
多个参数也可以去掉参数类型,要去掉就都去掉
-
可以通过接口创建对象
-
匿名内部类,没有类 的名称,必须借助接口或父类
-
测试stop
- 建议线程正常停止–>利用次数。不建议死循环,
- 建议使用标志位 -->设置一个标志位
- 不要使用stop或者destroy等过时或jdk不建议的方法
- 让线程自己停止下来,
-
没一个对象都有一把锁,sleep不会释放锁
-
礼让线程:礼让不一定成功,看CPG心情
-
切记,当线程进行循环的时候,要记得更新线程的状态
-
线程死亡之后不能启动
-
优先级高的代码块可以先运行,但是并不是绝对的按照优先级大小来运行,即性能倒置//先设置优先级,在启动
-
sleep可以放大问题的发生性
-
synchronized默认锁定的是this,可以通过同步块锁定一个对象
-
集合加泛型进行约束
-
CopyOnWriteArrayList (JUIC并发包 )
-
线程池:ExecutorService 和 Executors