java thread suspend_关于Thread对象的suspend,resume,stop方法
一、作用
对于老式得磁带录音机,上面都会有,暂停,继续,停止。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方法相关推荐
- java if equals_Java中判断对象是否相等的equals()方法使用教程
Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认 ...
- java 手动线程调度_Java Thread 多线程 操作线程
5.线程的创建和启动 A.继承Thread类或实现Runnable接口,重写或实现run方法,run方法代表线程要完成的任务 B.创建Thread子类或是Runnable的实现类,即创建的线程对象:不 ...
- Java多线程3:Thread中的静态方法
Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...
- Java并发编程:Thread类的使用
为什么80%的码农都做不了架构师?>>> Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学 ...
- java线程学习-Thread.currentTread().getName()和this.getName()的区别
很久没有写java程序了,由于为了改变目前的状况,打算花两天时间学习一下java的线程开发和高并发. 线程开发使用thread类,或者runnable接口,而且thread类也是实现了runnable ...
- Java多线程2:Thread中的实例方法
Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...
- (一)java多线程之Thread
目录 Thread类 创建一个线程 java创建线程有两种方式 实现 区别 让线程"睡"一会 停止线程 线程的属性 Thread.join() Thread.yield 线程的异常 ...
- Java中therad_java中Thread的深入了解(一)
线程 线程是进程中的一个单一顺序的执行单元,也被称为轻量进程(lightweight process).线程有自己的必须资源,同时与其他线程进程共享全部资源.同一个进程中,线程是并发执行的.由于线程的 ...
- 再谈 Java中Runnable和Thread的区别
在面试中老有面试官问这个问题,个人觉得这个问题问的没有技术,一个死记硬背就能回答的很好.但是更深的回答是什么了,那就是直接回答源码吧. thread类实现了runnable 接口 ,Runnable就 ...
最新文章
- IOS开发怎么UINavigationController设置title标题的颜色?
- 瀑布模型 原型模型 增量模型 螺旋模型的优缺点
- 使用tab键分割的文章能快速转换成表格。( )_EXCEL的163种使用技巧集锦-42~62
- Akka-CQRS(16)- gRPC用JWT进行权限管理
- Qt在线/离线安装包下载网址和说明
- 20181027 考试记录
- 注意力机制attention和Transformer
- Netty03 进阶
- Geomesa-HBase索引篇——Z3索引
- Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks(MAML)研读笔记
- 【剑指offer】解题思路 53-68
- 博客园背景滴墨水特效
- 多源异构航班航迹数据流实时融合方法研究
- 手机号批量查询归属地方法及其简介批量查询号码归属地方法
- 方法模板ThinkPHP3.1.2项目技巧三部曲 一
- 1056 Mice and Rice (25 point(s))
- easycode 表配置信息不正确
- 上海人工智能产业生态圈逐渐形成,产业发展进入“快车道”
- 计算机网络机房建设过程中单独设置接地体时,必备的IDC机房建设流程解析明细!...
- matlab生成一个数值一样的向量
热门文章
- SpringBoot(五) application配置文件
- 实现10负荷点的配电网蒙特卡洛可靠性计算matlab程序,代码有注释。
- 操作系统中的进程管理
- 遗传算法求解多旅行商问题的新方法
- 《赛博朋克2077》从卖肾客手中救人|体验超梦片
- 福建自贸区利用大数据防控涉税风险 拟在全国推广
- 基SpringBoot的智能社区警务管理平台
- 泰勒级数sinx c语言,C语言用泰勒级数计算sinx,计算sin1,sin2都正确,sin
- Android音视频开发进阶
- C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile