zoukankan      html  css  js  c++  java
  • java 哪些情况下会使对象锁释放

    Java_多线程_锁释放

    问:Java多线程运行环境中,在哪些情况下会使对象锁释放?
    答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:
    (1)执行完同步代码块,就会释放锁。(synchronized)
    (2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(exception)
    (3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进
            入对象的等待池。(wait)

    除了以上情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁。
    在下面情况下,线程是不会释放锁的:
    (1)执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
    (2)在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
    (3)在执行同步代码块的过程中,其他线程执行了当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁。
    转自:http://blog.sina.com.cn/s/blog_51335a000101nxlb.html
  • 相关阅读:
    C# FTP操作
    SWUST OJ(963)
    插入排序(折半插入排序)
    SWUST OJ(962)
    SWUST OJ(961)
    SWUST OJ(960)
    SWUST OJ(957)
    SWUST OJ(956)
    SWUST OJ(955)
    SWUST OJ(954)
  • 原文地址:https://www.cnblogs.com/yidaxia/p/4209001.html
Copyright © 2011-2022 走看看