拿捏Java:多线程&JUC

115 阅读1分钟

一、多线程

image.png

image.png

二、并发和并行

image.png

三、实现方式

image.png

1、第一种方法

image.png

2、第二种方法

image.png

image.png

3、第三种方法

image.png

image.png

四、Thread中常见的成员方法

image.png

image.png

image.png

image.png

守护进程

image.png

五、线程的生命周期

image.png

六、线程安全的问题

image.png

image.png

image.png

image.png

image.png

将同步代码块中的方法变成同步方法:

image.png

想要手动的打开锁和关闭锁,JDK5后提供了一个新的锁对象lock:

image.png

image.png

使用try catch finally实现lock锁:

image.png

七、死锁

注意避免让锁嵌套

image.png

八、生产者和消费者

image.png

image.png

消费者:

image.png

生产者:

image.png

桌子:

image.png

测试用例:

image.png

image.png

image.png 生产者:

image.png 消费者:

image.png 测试用例:

image.png

九、线程的6种状态

image.png

image.png

综合练习:

1、 image.png

image.png

2、

image.png

image.png

3、

image.png

image.png 升级版解决方法:

image.png

4、

image.png

重点是要返回线程的结果,即每个线程获取的最大值,因此我们用第三种创建线程的方法,这个方法就可以返回线程的运行结果

image.png

image.png

十、线程池

image.png

image.png

image.png

image.png

image.png

image.png

image.png 细节: 提交的任务被安排的顺序是:核心线程->等待队列->临时线程->拒绝策略

1、创建临时线程:当核心线程被占用并且排队队列中已排满时,会创建临时线程处理任务;

2、先提交的任务优先处理吗?不是,有可能先提交的任务进入等待队列,后提交的任务创建临时线程运行

image.png

image.png

image.png

自定义线程池:

image.png

最大并行数:

image.png

线程池多大合适?

image.png