黑马程序员技术交流社区
标题:
总结了一下什么时候释放锁,大家看下有什么遗漏没
[打印本页]
作者:
x378320002
时间:
2013-6-10 11:24
标题:
总结了一下什么时候释放锁,大家看下有什么遗漏没
本帖最后由 x378320002 于 2013-6-10 18:54 编辑
在以下情况下,持有锁的线程会释放锁:
1. 执行完同步代码块。
2. 在执行同步代码块的过程中,遇到异常而导致线程终止。
3. 在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进行对象的等待池。
在以下情况下,线程虽然停止执行,但是线程不会释放锁:
1. 在执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
2. 在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
3. 在执行同步代码块的过程中,其他线程执行了当前对象的suspend()方法,当前线程被暂停,但不会释放锁。
在一个同步代码块中可能有对个线程在wait状态,被唤醒后如果没有锁还是不能执行,也就是即使线程已经在同步代码块内,
每执行一个语句都是需要锁的,没有锁就是寸步难行~~~
作者:
残影
时间:
2013-6-10 12:46
哈,好全哦,腻害。。。。O(∩_∩)O哈哈~我再瞎闹一个,,,死锁的时候线程都不释放锁,然后就挂了,\(^o^)/~{:soso_e112:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2