一、作用

对于老式得磁带录音机,上面都会有,暂停,继续,停止。Thread中suspend,resume,stop方法就类似。

suspend,使线程暂停,但是不会释放类似锁这样的资源。

resume,使线程恢复,如果之前没有使用suspend暂停线程,则不起作用。

stop,停止当前线程。不会保证释放当前线程占有的资源。

二、代码

public static void main(String[] args) {

Thread thread = new Thread(new Runnable() {

@Override

public void run() {

for (int i = 0; i <= 10000; i ++) {

System.out.println(i);

try {

TimeUnit.SECONDS.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

});

thread.start();

try {

TimeUnit.SECONDS.sleep(5);

} catch (InterruptedException e) {

e.printStackTrace();

}

thread.suspend();                       //注释1

try {

TimeUnit.SECONDS.sleep(5);

} catch (InterruptedException e) {

e.printStackTrace();

}

thread.resume();                        //注释2

try {

TimeUnit.SECONDS.sleep(5);

} catch (InterruptedException e) {

e.printStackTrace();

}

thread.stop();                        //注释3

System.out.println("main end..");

}

代码中注释1的地方,线程会暂停输出,直到注释2处才恢复运行,到了注释3的地方,线程就被终止了。

suspend,resume,stop这样的方法都被标注为过期方法,因为其不会保证释放资源,容易产生死锁,所以不建议使用。

三、如何安全的暂停一个线程

使用一个volatile修饰的boolean类型的标志在循环的时候判断是否已经停止。

public class Test {

public static void main(String[] args) {

Task task = new Task();

new Thread(task).start();

try {

TimeUnit.SECONDS.sleep(5);

} catch (InterruptedException e) {

e.printStackTrace();

}

task.stop();

System.out.println("main end...");

}

static class Task implements Runnable {

static volatile boolean stop = false;

public void stop() {

stop = true;

}

@Override

public void run() {

int i = 0;

while (!stop) {

System.out.println(i++);

try {

TimeUnit.SECONDS.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

java thread suspend_关于Thread对象的suspend,resume,stop方法相关推荐

  1. java if equals_Java中判断对象是否相等的equals()方法使用教程

    Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认 ...

  2. java 手动线程调度_Java Thread 多线程 操作线程

    5.线程的创建和启动 A.继承Thread类或实现Runnable接口,重写或实现run方法,run方法代表线程要完成的任务 B.创建Thread子类或是Runnable的实现类,即创建的线程对象:不 ...

  3. Java多线程3:Thread中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

  4. Java并发编程:Thread类的使用

    为什么80%的码农都做不了架构师?>>>    Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学 ...

  5. java线程学习-Thread.currentTread().getName()和this.getName()的区别

    很久没有写java程序了,由于为了改变目前的状况,打算花两天时间学习一下java的线程开发和高并发. 线程开发使用thread类,或者runnable接口,而且thread类也是实现了runnable ...

  6. Java多线程2:Thread中的实例方法

    Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...

  7. (一)java多线程之Thread

    目录 Thread类 创建一个线程 java创建线程有两种方式 实现 区别 让线程"睡"一会 停止线程 线程的属性 Thread.join() Thread.yield 线程的异常 ...

  8. Java中therad_java中Thread的深入了解(一)

    线程 线程是进程中的一个单一顺序的执行单元,也被称为轻量进程(lightweight process).线程有自己的必须资源,同时与其他线程进程共享全部资源.同一个进程中,线程是并发执行的.由于线程的 ...

  9. 再谈 Java中Runnable和Thread的区别

    在面试中老有面试官问这个问题,个人觉得这个问题问的没有技术,一个死记硬背就能回答的很好.但是更深的回答是什么了,那就是直接回答源码吧. thread类实现了runnable 接口 ,Runnable就 ...

最新文章

  1. IOS开发怎么UINavigationController设置title标题的颜色?
  2. 瀑布模型 原型模型 增量模型 螺旋模型的优缺点
  3. 使用tab键分割的文章能快速转换成表格。( )_EXCEL的163种使用技巧集锦-42~62
  4. Akka-CQRS(16)- gRPC用JWT进行权限管理
  5. Qt在线/离线安装包下载网址和说明
  6. 20181027 考试记录
  7. 注意力机制attention和Transformer
  8. Netty03 进阶
  9. Geomesa-HBase索引篇——Z3索引
  10. Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks(MAML)研读笔记
  11. 【剑指offer】解题思路 53-68
  12. 博客园背景滴墨水特效
  13. 多源异构航班航迹数据流实时融合方法研究
  14. 手机号批量查询归属地方法及其简介批量查询号码归属地方法
  15. 方法模板ThinkPHP3.1.2项目技巧三部曲 一
  16. 1056 Mice and Rice (25 point(s))
  17. easycode 表配置信息不正确
  18. 上海人工智能产业生态圈逐渐形成,产业发展进入“快车道”
  19. 计算机网络机房建设过程中单独设置接地体时,必备的IDC机房建设流程解析明细!...
  20. matlab生成一个数值一样的向量

热门文章

  1. SpringBoot(五) application配置文件
  2. 实现10负荷点的配电网蒙特卡洛可靠性计算matlab程序,代码有注释。
  3. 操作系统中的进程管理
  4. 遗传算法求解多旅行商问题的新方法
  5. 《赛博朋克2077》从卖肾客手中救人|体验超梦片
  6. 福建自贸区利用大数据防控涉税风险 拟在全国推广
  7. 基SpringBoot的智能社区警务管理平台
  8. 泰勒级数sinx c语言,C语言用泰勒级数计算sinx,计算sin1,sin2都正确,sin
  9. Android音视频开发进阶
  10. C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile