【多线程学习笔记整理】002_线程的停止、暂停、与yield
一、停止线程的三种方式
停止线程是多线程中的一个很重要的点,停止线程意味着在线程处理完当前任务之前终止正在做的操作,但是如果不能正确的操作,可能会发生不可预期的结果。
1)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止;
2)使用Thread.stop()方法强行终止线程,但是不推荐这种方法,因为stop和suspend以及resume方法一样,都是作废过期的方法,使用它们可能会产生不可预料的结果;
3)使用interrupt方法。
二、使用interrupt方法
举两个栗子:
栗子一

栗子二

抛异常方式终止线程:举个栗子
public class StopThread2 extends Thread {
/*
public void run() {
for (int i = 0; i < 200000; i++){
if(this.interrupted()){
System.out.println("当前线程已经中断,循环即将退出");
break;
}
System.out.println(i);
}
//通过break方式不行,break只能终止循环,不能终止线程,还是抛异常吧
System.out.println("for循环虽然终止了,我还在运行");
}
*/
@Override
public void run() {
try {
for (int i = 0; i < 200000; i++){
if(this.interrupted()){
System.out.println("当前线程已经中断");
throw new InterruptedException();
}
System.out.println(i);
}
} catch (InterruptedException e) {
System.out.println("进入catch块,线程即将退出");
e.printStackTrace();
}
}
}
三、线程的暂停
线程的暂停方法为suspend(),线程的恢复方法为resume(),来看看api上的说明

这两个方法已经被弃用,所以我们不做过多解释。
四、yield()方法
yield()方法是Thread类的静态方法,作用是放弃当前的CPU资源,将它让给其他任务去占用CPU执行时间,但是这个‘其他任务’并不确定,有可能刚刚放弃,然后马上又获得CPU时间片
举个栗子:
public class YieldThread extends Thread {
@Override
public void run() {
super.run();
long startTime = System.currentTimeMillis();
for(int i = ; i < ; i++){
//测试有无yield()方法的时候的耗时
//Thread.yield();
i++;
}
long endTime = System.currentTimeMillis();
System.out.println("耗时:" + (endTime - startTime) + "毫秒");
}
}
public class TestClass {
public static void main(String[] args) {
Thread thread = new YieldThread();
thread.start();
}
}
运行结果:
无yield方法:耗时:3毫秒
有yield方法:耗时:145毫秒
【多线程学习笔记整理】002_线程的停止、暂停、与yield的更多相关文章
- 多线程学习笔记八之线程池ThreadPoolExecutor实现分析
目录 简介 继承结构 实现分析 ThreadPoolExecutor类属性 线程池状态 构造方法 execute(Runnable command) addWorker(Runnable firstT ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- java进阶-多线程学习笔记
多线程学习笔记 1.什么是线程 操作系统中 打开一个程序就是一个进程 一个进程可以创建多个线程 现在系统中 系统调度的最小单元是线程 2.多线程有什么用? 发挥多核CPU的优势 如果使用多线程 将计算 ...
- JUC学习笔记——进程与线程
JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- Java多线程学习笔记(一)——多线程实现和安全问题
1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
随机推荐
- smarty课程---smarty3的安装和使用
smarty课程---smarty3的安装和使用 一.总结 一句话总结:smarty 是什么,就不多说了,用过php,接触过php的人都对smarty 再熟悉不过了.它是一个很强大的代码分离软件,作为 ...
- Intellij IDEA 搭建Spring Boot项目(一)
原文出处 第一步选择File –> New –> Project –>Spring Initialer –> 点击Next 第二步自己修改 Group 和 Artifact 字 ...
- Objections vs. excuses
Objections are healthy. When someone is being offered a new opportunity or product, it's not unusual ...
- IE6不兼容hover已解决
新建一个csshover.htc文件,一下是csshover.htc内容 <public:attach event="ondocumentready" onevent=&qu ...
- ubuntu修改root密码
1.我们在安装系统的时候我们会把系统的密码设置的比较简单,所以导致后面我们别人很容易操作我们的电脑.所以,我们就可以修改密码,你只要在系统上输入: sudo passwd root
- Oracle11g温习-第一章 3、ORACLE逻辑结构
2013年4月27日 星期六 10:27 Oracle逻辑结构的相关数据字典: 记录各个表空间的详细信息. SYS @ prod > select tablespace_name,status ...
- OAF系统更新默认LOGO图标和主页环境描述
更新EBS OAF系统中默认的LOGO图标和主页的环境描述 左上角的ORACLE图片位置在 登录界面左上角oracle LOGO图片为GIF格式,大小155*20 背景透明.文件名为:FNDSSC ...
- 使用CLOB抛出数字或值错误异常
今天在调试某个问题的时候,由于使用了很多循环,我需要都打印出来,试图使用clob整体处理之后再打印. 最后抛出此异常:数字或值错误. 网友解释如下: $ oerr ora 650206502, 000 ...
- 进程退出exit、_exit、abort
分为正常退出,异常退出 正常退出的方法: 1.在main函数中执行return 2.调用exit函数 3.调用_exit 函数 ----------------------------------- ...
- JFace下ApplicationWindow关闭窗口时结束进程
/** * Configure the shell. * @param newShell */ @Override protected void configureShell(Shell newShe ...