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