2023/3/3 多线程&JUC(第一部分)

多线程&JUC

一、线程

请添加图片描述

二、并发与并行

请添加图片描述

三、多线程的实现方式

请添加图片描述

1、继承Thread类的方式进行实现

请添加图片描述

2、实现Runnable接口的方式进行实现

注意此时需要通过Thread.currentThread()方法获取当前的线程然后再获取线程名

请添加图片描述

3、利用Callable接口和Future接口方式实现

请添加图片描述

4、三种实现方式的对比

前两种不能获取运行结果,但是第三种可以

请添加图片描述

四、线程的常见成员方法

请添加图片描述

1、如果是第一种方式实现的多线程,使用构造方法设置名字时,MyThread类中必须在构造方法中调用父类的构造方法进行命名

请添加图片描述

2、优先级线程只是一种概率,优先级大运行的概率大,并不是绝对的

3、当其他的非守护线程结束以后,守护线程会陆续的结束(不是突然结束,而是慢慢陆续结束,可能再运行一会儿)

4、礼让线程,表示当前的线程让出CPU的执行权,再次让所有线程进行抢占,可能还是当前线程再抢占到,所以也是一种概率,礼让后,该线程的运行概率会有所下降

5、插入线程,表示当前的线程被插入的线程插队,必须要插入线程完成之后才会继续执行当前的线程

五、线程的生命周期

请添加图片描述

六、同步代码块

请添加图片描述

请添加图片描述

1、注意同步代码块必须要在while循环的里面,否则当一个线程进入同步代码块时一定会将里面的内容执行完毕,也就是一个窗口卖完了所有的票

2、两个线程的锁必须是同一把锁,通常如上图中写锁

3、注意这里面的票必须要是静态的,这样才表示线程卖同样的一百张票,否则就是分别卖一百张了

七、同步方法

请添加图片描述

请添加图片描述

1、先写同步代码块,然后抽取出方法最简单

2、StringBuilder相比于StringBuffer而言,前者多线程不安全,后者都是同步方法,线程安全

八、lock锁

请添加图片描述

1、注意锁必须是惟一的

2、注意break最后跳出循环时可能会跳过解锁操作,所以通过try——catch中的finally来进行善后,保证最后一定解锁使程序结束

九、死锁

写代码的时候不要进行锁嵌套

十、生产者和消费者

请添加图片描述

常见方法

请添加图片描述
请添加图片描述
请添加图片描述

1、要创建一个共同的锁

2、注意等待的时候需要通过锁来等待,表示和这个锁绑定,从而方便后续的唤醒

3、唤醒只需要在刚吃完,或者刚做完的时候即可覆盖所有的情况,不要重复

4、唤醒需要使用锁,并且用notifyAll()方法唤醒所有与锁绑定的线程

十一、阻塞队列

请添加图片描述
请添加图片描述

1、注意此时输出语句是在锁的外面的,所以输出可能是乱的,但是程序本身没有错误

2、通过构造方法传递参数,从而保证为同一个阻塞队列

十二、线程六态

Java中没有运行态

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值