多线程知识点总结

来源:互联网 发布:java的cookie 编辑:程序博客网 时间:2024/05/21 09:12

多线程的问题主要围绕3个问题处理:1.原子性,2.可见性,3.有序性

1.原子性,不可被其他线程打断的操作。如read.write

sychronized

2.可见性:一条线程修改了某值,新值对其他线程立即可知;

普通变量是通过主内存完成多线程的共享,因此在多线程的情况下,很多脏数据。

volatile,sychronized,final

3.有序性:保证多线程的操作顺序同代码执行顺序一致。

如1)i=0,2)j=i,3)i=20.A线程执行1后,才能执行2,然后C执行3,若C指令使3提前执行,则最后结果为i=10,j=10

sychornized,volatile


线程调度

协同调度,运行结束后,主动通知系统切换到另一个线程上。

缺点:如果不告知,会形成阻塞。

抢占式调度:线程由系统分配时间,线程切换不由线程决定。


线程五个状态:新建、运行、等待、阻塞、结束。


线程安全

当多个线程访问一个对象时,总能获得正确的调用结果。


悲观锁和乐观锁

悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,

乐观锁:拿数据的时候都认为别人不会修改,所以不会上锁。如CAS

线程安全实现方法

1.互斥同步

为悲观锁,且阻塞同步。

方法有:临界区,互斥量,信号量。

同步手段:1.sychronized;2.reentraintLock

1.非阻塞同步

为乐观锁。CAS实现。

锁的四种状态:无锁,偏向锁,轻量级锁,重量级锁。

锁优化:

自旋锁,锁消除,锁粗化,轻量级锁,偏向锁。

1.自旋锁:线程发现没有取得锁时,为防止线程频繁切换状态,可以并行两个或者两个以上的线程,使后面的线程等待释放锁(需要让其执行一个循环,即自旋)

2.锁消除:对代码上要求同步,实际上被检测到不可能存在共享数据竞争的锁进行消除。

3.锁粗化:原则上使同步块作用范围尽量小——只在共享数据的实际作用域中才进行同步。但如果没有线程竞争,也频繁进行互斥同步等操作,会导致不必要的性能消耗。此时要把加锁同步范围扩展,即粗化到整个系列外部。

4.轻量级锁:无竞争的情况下使用CAS操作消除同步使用的互斥量

场景:线程交替执行同步块的情况,若同时访问同一锁,会膨胀为重量级锁。 

5.偏向锁:把整个同步消掉,进出也没有CAS。锁会偏向于第一个获得它的线程,记录第一次获得锁的线程ID,之后该ID的线程再次进入 这个锁的相关同步块时,虚拟机不再做任何操作,如lock,unlock.当有其他线程尝试获取该锁时,偏向模式结束。


如1)i=0,2)j=i,3)i=20.A线程执行1后,才能执行2,然后C执行3,若C指令使3提前执行,则最后结果为i=10,j=10

sychornized,volatile


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 硕士延期毕业找好的工作怎么办 竞彩足球绑定信用卡提不了现怎么办 qq启动出现问题请卸载重装怎么办 u盘有文件打开后却是空的怎么办 王者荣耀不记得所在的区服怎么办 交易猫出售游戏账号是微信号怎么办 网银密码输错3次怎么办 无线网卡信号很好就是没网速怎么办 红米2a忘了登陆账号怎么办 qq封了密保手机没用了怎么办 乐视手机重置账号密码忘了怎么办 此版本的ios不支持银联怎么办 单反m档拍出来照片是黑色怎么办 从兴趣部落老发骚扰信息怎么办 在厂里辞一个月厂长不批怎么办 在厂里做管理被员工恐吓怎么办 在葡京娱乐输了很多钱怎么办 从珠海入镜澳门北京往返签注怎么办 艾艾灸灸了一身小子子怎么办? 微信视频已过期或已清理怎么办 视频已过期或已被清理怎么办 小孩作业不会老婆天天吵骂打怎么办 苹果手机在太阳下屏幕变暗怎么办 斗鱼的鱼丸竞猜主播结算了怎么办 附近有个小姐姐想加她好友怎么办 孩子出现听别人说话语速很快怎么办 苹果手机上的邮件删了怎么办 手机qq邮箱独立密码忘记了怎么办 哺乳期吃了人参回奶了怎么办? 扣扣邮箱里的邮件过期了怎么办 一体机的管理员账号被删除了怎么办 手机里的邮箱重要吗删除了怎么办 华为荣耀10账号邮箱忘记了怎么办 大陆微信号在台湾登录不上怎么办 威纶触摸屏被禁止到反编译了怎么办 微信公众号邮箱被占用怎么办 京东绑定的手机号不用了怎么办 绑定微信的手机号不用了怎么办 绑定支付宝的手机号不用了怎么办 百度账号手机号换了密码忘了怎么办 换手机好了华为账号密码忘了怎么办