01线程知识回顾
创建线程的方式
1.写一个子类继承Thread,重写run方法,创建对象调用start开启线程
2.创建一个Runnable的对象,然后借助Thread的构造方法进行创建线程,通过start调用开启线程。
多线程处理一个资源的时候,会出现资源混乱【线程的安全问题】
如何解决线程的安全问题?
只要保证资源在操作时只有一个线程占用,可以使用同步进行实现
同步方式:
1.同步代码块【synchronized】
2.同步方法【synchronized】
3.Lock锁【reentrantLock】
线程的状态
1.NEW
2.Runnable
3.Blocked
4.Waitting【无线等】wait()释放锁
5.Timed_Waitting
6.Terminated
02线程间的通信:等待唤醒机制实现线程间通信
等待唤醒就是:wait/notify notifyAll
等待唤醒的方法都来自Object
public void wait():让线程进入等待,释放锁
public void notifyAll():能唤醒所有等待中的线程
这些方法都是用锁来调用
使用这些方法的时候注意:
1)这些方法的调用,多个线程必须使用同一个锁调用
2)调用方法必须在同步的代码中
如果一个线程进入了无限等待,一定需要其他的线程才能去唤醒该等待的线程
03Lambda表达式的初步使用
Lambda 面向方法的编程
Lambda是匿名内部类的一个替代品
如果一个地方可以使用匿名内部类,可以使用其对应的lambda表达式替换。
匿名内部类:
1)好处:格式鲜明,语法结构鲜明,更容易看懂代码。
2)弊端,语法太复杂
lambda表达式:
1)好处:语法简洁,书写方便
2)弊端:可读性较差
04Lambda表达式的格式分析
Lambda表达式是匿名内部类的替代品,匿名内部类主要就是实现了接口的抽象方法,格式方法。
如果使用Lambda表达式去实现一个接口的抽象方法,格式:
1.参数列表
2.箭头
3.方法体
格式:(参数列表)->{方法体}
就是该抽象方法的具体实现,和匿名内部类中实现的方法是一回事
==Lambda表示只适用于接口,而且这个接口必须只能有一个抽象方法。==