Sychronized释放锁
2017-03-28 10:31:00 0 举报
当一个线程在同步代码块或同步方法中执行完毕后,它会释放锁。释放锁的过程是通过调用`notify()`或`notifyAll()`方法来实现的。这些方法会唤醒等待该锁的其他线程,使它们进入就绪状态并尝试获取锁。如果只有一个线程在等待锁,那么它将成为锁的拥有者并继续执行。如果有多个线程在等待锁,那么调度器将选择一个线程来获得锁并执行。一旦线程完成了对共享资源的修改操作,它应该再次调用`notify()`或`notifyAll()`方法来通知其他等待的线程可以继续执行。这样可以避免死锁的发生,确保多个线程能够正确地访问共享资源。
作者其他创作
大纲/内容
空、不需要记录信息 011 GC标记
开始释放锁
等于0
是
指向锁记录的指针 000 轻量级锁定
存储内容 标志位 状态
检查Nest字段是否大于1
抛出异常
设置owner为null,然后唤醒一个正在阻塞或等待的线程再一次试图获取锁
否
检查rfThis是否大于0
收缩一个对象,通过将对象的lockword置换回原来的hashcode等值,来解除和monitor之间的关联来释放锁,同时将monitor放回到线程私有的可用monitor列表
Nest-1,并继续拥有锁
对象是否膨胀
结束
对象哈希码、对象分代年龄 001 未锁定
该线程是否是这个锁的拥有者
指向重量级锁指针 010 膨胀
0 条评论
下一页