首页 > 编程语言 > 详细

多线程学习-线程生命周期+锁机制

时间:2020-07-01 00:13:47      阅读:68      评论:0      收藏:0      [点我收藏+]

线程生命周期

创建 ---- 等待 ---- 执行(阻塞) ---- 死亡

1:线程创建:jvm分配内存,初始化成员变量等

2:等待:线程调用start方法开启线程,jvm创建方法栈,程序计数器等,等待可用的资源随时执行

3:执行:线程运行

4:阻塞:1当开启线程后没有可用CPU,2调用sleep放弃CPU,3调用阻塞式io,等待返回值,4等待notify,5等待获取同步锁

5:死亡:正常结束或异常结束

线程安全问题

出现原因:当多个线程同时操作一个对象。

解决办法:

1:synchronized关键字

  1)new一个对象当成锁,synchronized( 对象 ){ 代码块 }   (作用范围:操作同一个对象的这一部分代码安全)

  2)synchronized( this ){ 代码块 } (和1方法作用一样)

  3)synchronized( 类.class){ 代码块 }   (作用范围:不管new多少个对象操作,都安全)

  4)给对象或成员变量加static一起使用(和3一样)

2:lock同步锁

  创建Lock对象(lock,unlock)

  ReentranLock();

  参数:true:公平锁 -- 平均分配使用时间

  false:非公平锁  --- 谁抢到就是谁的,不主动放开别的永远用不了

区别

1:synchronize是jvm层面,lock代码层面

2:synchronize不可监控,进入和释放是代码执行完jvm自动释放,lock是用unlock方法手动释放

3:synchronize线程没有资源会进入阻塞状态一直等待,lock没有抢到资源会自动结束线程

4:synchronize只能是非公平锁,lock可选公平非公平

     

多线程学习-线程生命周期+锁机制

原文:https://www.cnblogs.com/Hstar-/p/13216531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!