多线程入门小结

先了解一下程序运行中的线程,进程,多线程都是什么意思
在操作系统中运行的程序就是进程。
进程中又可以有多个进程
比如说在播放视频时:画面,声音,字幕,弹幕都可以算作独立的线程。
很多多线程是模拟出来的,真正的多线程是指有多个CPU,即多核,如果是模拟出来的多线程即在一个CPU的情况下在同一时间点CPU只能执行一个代码因为切换得很快所以就有同时执行的错觉。

几个开启多线程的方法

1.实现runnable接口
在这里插入图片描述

2.继承Thread类:因为Thread类是实现了runnable的接口的,所以可以直接调用start方法
在这里插入图片描述

线程常用的几个方法

1.sleep线程休眠

在这里插入图片描述
2.yield线程礼让
在这里插入图片描述
3.join线程强制执行
join合并线程,代此线程执行完成后,再执行其他线程,其他线程处于阻塞状态,可以想象成插队

4.线程的优先级
线程的优先级用数字表示,范围从1-10;数字越大优先级越高
可以使用getPriority().setPriority(int xxx)
只是优先级,并不是排序!也就说可能优先级低的会先执行,也就导致性能倒置的问题!
5.观察线程状态
thread.getState()

在这里插入图片描述
6.daemon守护线程
在这里插入图片描述
通过setdaemon为true来开启守护线程(默认为false)
在这里插入图片描述

线程的生命周期

在这里插入图片描述

同步线程

多线程同时操作同一个资源时(并发)容易发生问题,资源状态更新不及时,在库存用尽时还被其他线程识别为有库存继续操作。
这时候我们就需要同步线程,让各个线程排队操作,这样就不会导致库存和实际数量不符了。
在这里插入图片描述
在这里插入图片描述

死锁

当两个线程都互相捏着对方线程下一步需要获取的资源时
比如说:
我:去面试找工作 公司:需要工作经验
我:需要工作才能有工作经验 公司:需要经验才能工作
这就陷入了死循环,谁也不让谁,程序没有人类智能,人在处理这种事情的时候还能变通,程序不行,程序就需要这个参数才能继续执行,没有就不行。
在这里插入图片描述

Lock锁

在这里插入图片描述
前面的synchronized和同步块属于是隐式加锁释放锁,
前面的synchronized和同步块属于是隐式加锁释放锁,lock属于显示锁,可以通过代码手动开启关闭
开启:

生产者消费者问题

在这里插入图片描述
可以通过释放锁并通知其他线程以此反复来解决这个问题
在这里插入图片描述

线程池

在这里插入图片描述

创建线程池的方法

 ExecutorService Service = Executors.newFixedThreadPool(3);

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值