多线程
2021-06-11 13:00:26 25 举报
多线程常用知识
作者其他创作
大纲/内容
“等待池”
1.Thread实现了Runable接口功能更多
线程的声明周期:
所有线程放到锁池
并行
2.程序结束直接关闭
堆:线程共有
锁、死锁
特性
时间段
拥有CPU权限
新建线程对象
CPU调度的最小单位
线程安全:内存安全
关键字:volatile、synchronized
就绪状态
当线程访问一个对象时,如果不用额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果
加锁
线程获取到
使用场景
不能自动唤醒,其他线程调用notify/notifyAll
不会再竞争同步锁
新建
synchronized:一个变量在同一时刻只允许一个线程对其lock操作
只有调用notify/notifyAll才会去竞争同步锁
运行
线程安全,属于线程
线程AB都需要对方的资源才能执行
防止死锁
异常退出run方法
volatile有禁止重排的语义
进程的一个控制单元/执行路径
yield()
sleep方法属于Thread类
时间点
守护jvm中所有非守护线程
禁止虚拟机不按照程序顺序执行
资源动态分配
join()
sleep()、wait()、yield()、join()的区别:
并发
jvm
调用wait方法进入等待池
一个线程修改操作其他线程看得见
一个线程异常,整个线程不能执行
原子性
和单线程结果一样
可见性
互斥性、可见性
线程池
用户线程
等待CPU权限
结果:5-0
进程与线程
sleep()、wait()
进程初始化时
随机一个放到锁池
有序性
并行与并发
守护线程
“锁池”
就绪
手动lock
依赖进程,无法自身控制,程序结束直接中断
栈:线程私有
其他线程调用该对象的start方法
一个进程可以有多个线程组成,线程只属于一个进程
进程只用的内存地址可以上锁
关键字:volatile、synchronized、final
可运行线程池中
同步阻塞
死亡
创建了两个实例,在堆中添加了两个5,结果:两个5-0
运行的线程执行wait方法,释放资源
程序结束
死锁
串行
执行程序代码
线程
等待阻塞
减小锁的粒度,不要多个功能用一个锁
线程执行后直接进入就绪状态,释放CPU执行权,保留CPU资格(cpu执行权分配给别人,别人抢不到的话继续执行)
程序的一次执行,具有独立功能的程序及其数据在处理机上顺序执行的活动。
阻塞状态
关键字:synchronized
wait方法属于object类
例如:GC
都是 new Thread,然后执行重写的run()方法
使用对比
1.为其他线程服务
阻塞
一边一边
一个操作中cpu不能中断
Thread和Runable的区别:
sleep超时、join结束或超时、IO完成
Synchronized
所有需要竞争同步锁的线程都会放在锁池中等待
边吃边打
运行中的线程获取对象的同步锁被背的线程占用
具有独立的空间,系统进行资源分配和调度的独立单位
并发三大特性
其他阻塞
线程执行sleep/join方法、或发出I/O请求
区别
进程
吃饭,接电话,继续吃饭
0 条评论
下一页