本帖最后由 x378320002 于 2013-6-10 18:54 编辑
在以下情况下,持有锁的线程会释放锁:
1. 执行完同步代码块。
2. 在执行同步代码块的过程中,遇到异常而导致线程终止。
3. 在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进行对象的等待池。
在以下情况下,线程虽然停止执行,但是线程不会释放锁:
1. 在执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
2. 在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
3. 在执行同步代码块的过程中,其他线程执行了当前对象的suspend()方法,当前线程被暂停,但不会释放锁。
在一个同步代码块中可能有对个线程在wait状态,被唤醒后如果没有锁还是不能执行,也就是即使线程已经在同步代码块内,
每执行一个语句都是需要锁的,没有锁就是寸步难行~~~
|