A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 x378320002 于 2013-6-10 18:54 编辑

在以下情况下,持有锁的线程会释放锁:
    1. 执行完同步代码块。
    2. 在执行同步代码块的过程中,遇到异常而导致线程终止。
    3. 在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进行对象的等待池。

在以下情况下,线程虽然停止执行,但是线程不会释放锁:
    1. 在执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
    2. 在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
    3. 在执行同步代码块的过程中,其他线程执行了当前对象的suspend()方法,当前线程被暂停,但不会释放锁。

在一个同步代码块中可能有对个线程在wait状态,被唤醒后如果没有锁还是不能执行,也就是即使线程已经在同步代码块内,
每执行一个语句都是需要锁的,没有锁就是寸步难行~~~

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
哈,好全哦,腻害。。。。O(∩_∩)O哈哈~我再瞎闹一个,,,死锁的时候线程都不释放锁,然后就挂了,\(^o^)/~{:soso_e112:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马