“在同步方法内调用等待是获取内在锁的简单方法”

这句话是假的,它是文档中的错误。

当线程进入同步方法时,它会获取固有锁。

同步方法中的线程被设置为锁的所有者并且处于RUNNABLE状态。

尝试进入锁定方法的任何线程都将变为BLOCKED。

当线程调用等待它释放当前对象锁(它保持所有锁与其他对象),而不是去WAITING状态。

当一些其他线程调用在同一对象上通知或notifyAll时,第一个线程将状态从WAITING更改为BLOCKED,

通知线程不会自动重新获取锁或变为RUNNABLE,实际上它必须争取与所有其他被阻止的线程的锁。

WAITING和BLOCKED状态都防止线程运行,但是它们是非常不同的。

WAITING线程必须通过一些其他线程的通知显式地转换为BLOCKED线程。

等待永远不会直接到RUNNABLE。

当RUNNABLE线程释放锁时(通过离开监视器或等待),BLOCKED线程中的一个自动占据它的位置。

所以总结一下,线程在进入同步方法时或在等待之后重新进入同步方法时获取锁。

public synchronized guardedJoy() {

// must get lock before entering here

while(!joy) {

try {

wait(); // releases lock here

// must regain the lock to reentering here

} catch (InterruptedException e) {}

}

System.out.println("Joy and efficiency have been achieved!");

}

java wait 释放_Java:wait()从同步块释放锁相关推荐

  1. java代码讲解_Java基础系列-代码块详解

    注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 前言 Java基础系列,尽量采用通俗易懂.循序渐进的方式,让大家真正理解Java基础知识! 代码块 ...

  2. java基础提升篇:synchronized同步块和volatile同步变量

    初遇 Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低 ...

  3. [转]关于java中的 sychronized 同步方法 与 同步块的理解

    首先,需要说明一点,也是最重要的一点,无论是同步方法 还是 同步块 都是只针对同一个对象的多线程而言的,只有同一个对象产生的多线程,才会考虑到 同步方法 或者是 同步块,如果定义多个实例的同步,可以考 ...

  4. java 同步块的锁是什么,java – 同步块 – 锁定多个对象

    我添加了另一个答案,因为我还没有添加评论给其他人的帖子. >事实上,同步是用于代码,而不是对象或数据.在同步块中用作参数的对象引用表示锁定. 所以如果你有如下代码: class Player { ...

  5. java 多线程(四)—— 线程同步/互斥=队列+锁

    同步.异步.互斥的区别 在很多文章中,直接把同步缩小为互斥,并称之为同步.下面也是这样的. 一.线程同步 = 队列 + 锁 同步(这里说的其实是互斥)就是多个线程同时访问一个资源. 那么如何实现? 队 ...

  6. java 关闭输出流_Java OutputStream.close()关闭并释放输出流资源

    首页 > 基础教程 > IO流 > OutputStream类 Java OutputStream.close()关闭并释放输出流资源 定义 public void close() ...

  7. java 堆内存不释放_Java可以写入/读取已释放的堆内存吗?

    这让我感到惊讶,我正在玩 Java Unsafe.基本上我正在测试的是 Allocate unsafe memory -> free the memory -> Write to the ...

  8. java 主动释放_java如何进行内存自动释放,垃圾回收的?

    垃圾收集的目的在于清除不再使用的对象.gc通过确定对象是否被活动对象引用来确定是否收集该对象.gc首先要判断该对象是否是时候可以收集.两种常用的方法是引用计数和对象引用遍历. 引用计数 每个对象都含有 ...

  9. java的同步块_Java 同步块

    Java同步块用来标记一个方法或一个代码块为同步的.Java同步块可以用来避免竞态. Java同步关键字 在 Java 中使用 synchronized 来标记同步块.一个同步块是同步在某些对象上.同 ...

最新文章

  1. Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)
  2. optee的RPC流程的代码详解
  3. C++类模版------STL的原理
  4. CentOs中怎样打开默认网卡并查看ip
  5. JZOJ 5483. 【清华集训2017模拟11.26】简单路径
  6. Linux基础知识--2.Linux的文件系统和bash的基础特性(1)
  7. 给刚博士毕业的年轻学者9点建议,最后一条:抓紧结婚,生娃!
  8. CDN(Content Delivery Network)
  9. mysql flask-login_Flask框架通过Flask_login实现用户登录功能示例
  10. 【Swing/文本组件】定义自动换行的文本域
  11. PTA题---求两个有序序列中位数所体现的思想。
  12. Grunt自动化工具相关
  13. 实践出真知:微服务经验之避坑指南
  14. Unity Shader-反射效果(CubeMap,Reflection Probe,Planar Reflection,Screen Space Reflection)
  15. 【梁小国】教你怎么签自己的名字
  16. 广东小学几年级有计算机课,广州小学开设网络班:小学生人手一台手提电脑
  17. warning: Clock skew detected. Your build may be incomplete解决方法
  18. 黑解(ICCID)证书备份
  19. 解决:记事本打开无乱码而用UE打开乱码现象
  20. 设计师必备特效生成器合集 2022背景快速制作指南

热门文章

  1. 「AI 口罩检查官」上线,0.3 秒检查口罩佩戴情况
  2. Ta 在假笑么?这个识别算法可以鉴定
  3. 记录博客第一次上热门
  4. 完全使用CSS制作下拉菜单
  5. 4月1日起 理想ONE零售价由33.8万元上调至34.98万元
  6. 小米超大杯旗舰不叫12 Ultra:或命名为MIX 5 Pro
  7. Siri为什么越来越蠢?
  8. 微信又更新了!支持上班摸鱼了
  9. 去哪儿:腊月二十九的火车线路有余票 机票价格低于往年
  10. 长城汽车申请“哈弗单身狗”、“哈弗奶狗”、“哈弗溜狗”等商标