多线程

87 阅读5分钟

多线程

实现Callable接口

image-20220724221541337

主要步骤和区别就在上面了

它有返回值 而且可以跑出异常

本章核心

image-20220726223244346

Lambda表达式

image-20220724222257819

image-20220724223621819

只有函数式接口才能使用lamdba表达式

接口实现使用的简化

1.定义一个函数式接口

interface ILike{
voide lambda();
}
​

2.实现类

class Like implments ILike{
 
 public void lambda(){
 
System.out.printl("fuck");
 }
​
​
}
​

3.使用

普通使用

image-20220724223126635

静态内部类使用

image-20220724223205205

局部内部类使用

image-20220724223232074

匿名内部类

image-20220724223446323

lambda表达式

image-20220724223556513

image-20220724224011577

image-20220724224242546

总结

image-20220724224513089

线程停止

image-20220726220324826

自己去写一个方法,满足某些情况时,执行自己的方法让线程停止

线程休眠

image-20220726220709464

线程礼让

image-20220726221134504

礼让不一定成功 因为礼让是让线程重新变成就绪状态 而不是阻塞状态

线程插队

image-20220726221507920

线程状态

image-20220726221653482

线程优先级

image-20220726222441718

优先级高的不一定先执行,但是先执行的概率很大

image-20220726222235715

守护线程

image-20220726222455269

gc就是守护线程

1.创建2个线程 其中一个上帝是守护线程

image-20220726222645368

2.将上帝变成守护线程

image-20220726222803777

jvm是不会管守护线程是否结束的

线程同步

image-20220726222940607

使用锁或者队列

image-20220726223013815

image-20220726224030758

这个synchronized锁,它锁的是this 也就是说锁的是方法本身 如果方法本身没有操作到需要同步的数据时,锁是没用的,例如所有小偷都进入房间了,然后你才把他们锁起来一样,所以也可以使用同步代码块。

image-20220726224452210

我们只要把需要操作的数据放入代码块中,然后将共享资源(共享的会改变的实例对象)成为监视器就好了

image-20220726224942916

JUC拓展

image-20220727222132132

java.util.concurrent包下的CopyOnWriteArrayList是一个线程安全的数组列表

死锁

image-20220727222319823

下面模拟2个线程争抢锁

image-20220727222803603

image-20220727222839871

为choice为0的线程 进来先获取口红,而choice为1(不为0)的 进来先获取镜子

当线程阻塞时间过后 0的获取镜子 1的获取口红,因为口红和镜子只有一份所以发生死锁

image-20220727223055228

image-20220727223237645

Lock锁

image-20220727223327470

ReentrantLock (可重复锁)

image-20220727223559106

image-20220727223721528

在使用共享资源的地方使用lock.lock()方法就能加锁,但是别忘记死锁了

synchronized和Lock区别

image-20220727223643244

线程协作 线程通信

image-20220727224015920

生产者消费者问题

image-20220727224321090

解决方法1

image-20220727224333767

缓冲区

image-20220727225033064

image-20220727225055707

生产者

image-20220727224835436

消费者

image-20220727224903968

方法2flag标志位

image-20220727225640577

image-20220727225620090

===================================================

image-20220727225735263

\