目录

  • 1.suspend与resume方法的使用
  • 2.suspend与resume方法的缺点——独占
  • 3.suspend与resume方法的缺点——不同步

  暂停线程意味着此线程还可以恢复运行。在 Java 多线程中,可以使用 suspend() 方法暂停线程,使用 resume() 方法恢复线程的执行。

1.suspend与resume方法的使用

  创建项目suspend_resume_test,文件MyThread代码如下:

package mythread;
public class MyThread extends Thread {private long i = 0;public long getI() {return i;}public void setI(long i) {this.i = i;}@Overridepublic void run() {while (true) {i++;}}
}

文件Run.java代码如下:

package test.run;
import mythread.MyThread;
public class Run {public static void main(String[] args) throws InterruptedException {try {MyThread myThread = new MyThread();System.out.println("线程开始执行");myThread.start();Thread.sleep(3000);System.out.println(myThread.getI());System.out.println(myThread.getI());System.out.println("线程暂停执行");myThread.suspend();System.out.println("A=" + System.currentTimeMillis() + " i=" + myThread.getI());Thread.sleep(3000);System.out.println("A=" + System.currentTimeMillis() + " i=" + myThread.getI());System.out.println("线程恢复执行");myThread.resume();System.out.println(myThread.getI());System.out.println(myThread.getI());Thread.sleep(3000);System.out.println("线程暂停执行");myThread.suspend();System.out.println("B=" + System.currentTimeMillis() + " i=" + myThread.getI());Thread.sleep(3000);System.out.println("B=" + System.currentTimeMillis() + " i=" + myThread.getI());} catch (InterruptedException e) {e.printStackTrace();}}
}

  程序运行后的结果如下:

线程开始执行
2185737846
2185793292
线程暂停执行
A=1653834350323 i=2185874251
A=1653834353323 i=2185874251
线程恢复执行
4387175149
4387217064
线程暂停执行
B=1653834356324 i=4387272762
B=1653834359325 i=4387272762

  从控制台的输出我们可以很清楚地看到:在开始和暂停之间的两次次输出是不同的,说明线程正在运行;在暂停和恢复之间的两次输出是一样的,说明线程已暂停;在恢复之后的两次输出是不同的,说明线程已恢复执行。

2.suspend与resume方法的缺点——独占

  在使用 suspend 与 resume 方法时,如果使用不当,极易造成公共的同步对象的独占,使得其他线程无法访问公共同步对象。

3.suspend与resume方法的缺点——不同步

  在使用 suspend 与 resume 方法时也容易出现因为线程的暂停而导致数据不同步的情况。

以上代码下载请点击该链接:https://github.com/Yarrow052/Java-package.git

Java多线程技能(九)——暂停线程相关推荐

  1. Java 多线程(七) 线程间的通信

    Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...

  2. Java 多线程(八) 线程状态图

    Java 多线程(八) 线程状态图 结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容. 一.线程基本状态图 这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过 ...

  3. Java 多线程(三) 线程的生命周期及优先级

    Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...

  4. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  5. Java多线程详解(线程不安全案例)

    嗨喽-小伙伴们我又来了, 通过前面两章的学习,我们了解了线程的基本概念和创建线程的四种方式. 附上链接: 1.  Java多线程详解(基本概念)​​​​​​​ 2. Java多线程详解(如何创建线程) ...

  6. Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字

    线程安全问题是多线程编程中最典型的一类问题之一.如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的. 通俗来说,线程不安全指的就是某一代 ...

  7. Java多线程系列(二):线程的五大状态,以及线程之间的通信与协作

    在Java面试的时候,经常会问到Java并发编程相关的多线程.线程池.线程锁.线程通信等面试必考点,比如: Java并发编程系列:Java线程池的使用方式,核心运行原理.以及注意事项 Java并发编程 ...

  8. java多线程总结五:线程池的原理及实现

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.         假设一个服务器完成一项任务所需时间为:T1 ...

  9. Java多线程之集合类(线程安全和不安全)

    Java多线程之集合类(浅析线程安全和不安全) 本文目录: 1.线程不安全之ArrayList,HashSet,HashMap和线程安全之CopyOnWriteArrayList,CopyOnWrit ...

最新文章

  1. python多线程加锁异步处理装饰器
  2. 使用 Bamboo 构建项目的 CICD 过程文档
  3. Ruby常用比较操作符
  4. 使用Speedion 3.0.17或更高版本轻松从事务中返回值
  5. 【Jetson-Nano】2.Tensorflow和Pytorch的安装
  6. AndroidStudio_报错PluginApplicationException: Failed to apply plugin [id ‘com.and---Android原生开发工作笔记227
  7. YII实现dropDownList 联动事件
  8. Linux中telnet命令
  9. 使用边缘信息提升全局阈值分割的性能
  10. Linux网络编程 | UDP编程
  11. 神经网络建模的适用范围,常用神经网络模型
  12. AVC、HEVC、VVC帧间预测技术
  13. 读计算机网络得学五笔吗,电脑五笔打字难不难学?大约要学多久才可以掌握?
  14. jQuery创建表格
  15. 8月24日科技联播:特斯拉回应苹果“疯狂挖人”,对方比我们有钱100倍
  16. linux源码在线阅读工具
  17. 据说是原CSDN排名第一的博客,我看到内容,确实被震憾了
  18. ANDROID StrictMode 使用
  19. 大厂代码规范及个人本学期的代码规范
  20. Java Lambda 多级分组

热门文章

  1. 数据结构(C语言版)严蔚敏->排序
  2. python plt可视化——打印特殊符号和制作图例
  3. C++ QT视频音乐播放器
  4. 如何保存计算机重要文档,电脑里的重要文件怎样保存才安全?
  5. sin和asin--正弦和反正弦函数
  6. cs224w(图机器学习)2021冬季课程学习笔记10 Applications of Graph Neural Networks
  7. confirm用法实例详解
  8. 这篇MSTP是真的爱了!
  9. miniSTM32开发板的一键下载电路
  10. 如何查看linux系统下的各种日志文件 linux 系统日志的分析大全