Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码

用一个例子来说明:
例子原理
启动一个线程A打印数字,从0打印到9,在数字等于5的时候,进入wait状态。在线程A启动后等待两秒,然后去唤醒刚才wait的线程(两秒足够让线程A执行到wait处的代码了),观察结果是否是连续的?还是重新打印了之前的数字。也就是说是接着执行的还是重新执行的。

public class WaitTest {private int a = 0;private synchronized void count(){for (int i = 0; i < 10; i++) {System.out.println(i);if(i == 5){try {System.out.println("进入 wait 状态...");wait();} catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) throws InterruptedException {WaitTest waitTest = new WaitTest();new Thread(waitTest::count).start();Thread.sleep(2000);synchronized (waitTest){System.out.println("唤醒线程...");waitTest.notifyAll();}}}

打印结果

0
1
2
3
4
5
进入 wait 状态...
唤醒线程...
6
7
8
9

通过结果可以看出,进入wait状态的线程被唤醒后,是接着上次执行的地方接着执行的。


技 术 无 他, 唯 有 熟 尔。
知 其 然, 也 知 其 所 以 然。
踏 实 一 些, 不 要 着 急, 你 想 要 的 岁 月 都 会 给 你。


Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码相关推荐

  1. JAVA中的多线程(八):线程的优先级和yield方法

    JAVA中的多线程(八):线程的优先级和yield方法 优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runna ...

  2. java thread 几个状态_Java-Thread 线程的几种状态

    Oracle JDK 定义中,线程一共有六种状态 NEW:未启动状态 Thread t= newThread() { @Overridepublic voidrun() { System.out.pr ...

  3. java中让步的_java 多线程—— 线程让步

    java 多线程 目录: 概述 第1 部分 yield()介绍 yield()的作用是让步.它能让当前线程由"运行状态"进入到"就绪状态",从而让其它具有相同优 ...

  4. Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?

    甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...

  5. JAVA中增强循环中用线程_在Java中以循环方式运行线程

    我是Java中的多线程和同步的新手.我正在尝试实现一项任务,其中给了我5个文件,每个文件将由一个特定线程读取.每个线程应从文件读取一行,然后将执行转发到下一个线程,依此类推.当所有5个线程都读取第一行 ...

  6. Java中常用的四种线程池

    在Java中使用线程池,可以用ThreadPoolExecutor的构造函数直接创建出线程池实例,在Executors类中,为我们提供了常用线程池的创建方法. ​ 接下来我们就来了解常用的四种: ne ...

  7. Java基础学习系列--(七)彻底搞懂java中的【异常、线程】的使用

    第一章 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中, ...

  8. java中关于++x前加加和x++后加加的疑惑!

    java中关于前加加和后加加的疑惑! 大家看下面的代码和截图(运行结果在截图中可以看到),不知道会不会跟我一样的感觉,会不会觉得自己对前加加和后加加的知识点还没学懂呢? 我甚至都一度怀疑是不是自己理解 ...

  9. 为什么线程被唤醒后锁会被抢?

    Java线程等待唤醒机制(加深理解) 等待队列 调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) 代码段内. 与等待队列相关的步骤 ...

最新文章

  1. React-生命周期杂记
  2. MAX Script 脚本语言
  3. 【直播课】TensorRT工程落地实践:快速掌握模型优化部署
  4. java outputstream stringbuffer_InputStream 和OutputStream
  5. SVN基于Maven的Web项目更新,本地过程详细解释
  6. 12行代码AC——L1-058 6翻了(15分)
  7. 【pyqt5学习】——graphicView显示opencv图像
  8. linux nona怎么用_nano命令_Linux nano 命令用法详解:字符终端文本编辑器
  9. 【干货】十分钟读懂浏览器渲染流程
  10. 前端学习(3203):复习类相关知识
  11. Algs4-1.4.18数组的局部最小元素
  12. java socket 远程调用_使用Socket反射Java流操作进行方法的远程调用(模拟RPC远程调用)...
  13. 【算法导论33】跳跃表(Skip list)原理与java实现
  14. python web性能不如php_Python比PHP更加适合网络开发的原因
  15. java中html5表格_java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)...
  16. JetBrains 2017/2018全系列产品激活工具
  17. perl语言简单入门
  18. xposed框架_免ROOT 用“太极”替代Xposed框架
  19. vagrant lanp mysql远程登录设置
  20. 什么是kick-off meeting?

热门文章

  1. R语言使用qcauchy函数生成柯西分布分位数函数数据、使用plot函数可视化柯西分布分位数函数数据(Cauchy distribution)
  2. Java基础之《netty(28)—TCP粘包拆包原理》
  3. Excel学习路径总结
  4. Android Wi-Fi Regulatory domain controlle the channel(以QCOM平台为例)
  5. GIT无法提交到码云。原因可能是所在提交位置不对
  6. SparkEnv源码解读
  7. input和textarea中字体样式不同的解决方法
  8. arcgis 根据坐标定位
  9. 英语词根词缀记忆法(全集)_掌握了英语词根词缀,就能迅速记下单词,快速提升词汇量...
  10. 合并时显示是无效的m3u8文件_m3u8合并,如何合并m3u8文件