一、停止线程的三种方式

  停止线程是多线程中的一个很重要的点,停止线程意味着在线程处理完当前任务之前终止正在做的操作,但是如果不能正确的操作,可能会发生不可预期的结果。

  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的更多相关文章

  1. 多线程学习笔记八之线程池ThreadPoolExecutor实现分析

    目录 简介 继承结构 实现分析 ThreadPoolExecutor类属性 线程池状态 构造方法 execute(Runnable command) addWorker(Runnable firstT ...

  2. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  3. JAVA多线程学习笔记(1)

    JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...

  4. java进阶-多线程学习笔记

    多线程学习笔记 1.什么是线程 操作系统中 打开一个程序就是一个进程 一个进程可以创建多个线程 现在系统中 系统调度的最小单元是线程 2.多线程有什么用? 发挥多核CPU的优势 如果使用多线程 将计算 ...

  5. JUC学习笔记——进程与线程

    JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...

  6. 多线程学习笔记九之ThreadLocal

    目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...

  7. Java多线程学习笔记(一)——多线程实现和安全问题

    1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...

  8. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  9. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

随机推荐

  1. smarty课程---smarty3的安装和使用

    smarty课程---smarty3的安装和使用 一.总结 一句话总结:smarty 是什么,就不多说了,用过php,接触过php的人都对smarty 再熟悉不过了.它是一个很强大的代码分离软件,作为 ...

  2. Intellij IDEA 搭建Spring Boot项目(一)

    原文出处 第一步选择File –> New –> Project –>Spring Initialer –> 点击Next 第二步自己修改 Group 和 Artifact 字 ...

  3. Objections vs. excuses

    Objections are healthy. When someone is being offered a new opportunity or product, it's not unusual ...

  4. IE6不兼容hover已解决

    新建一个csshover.htc文件,一下是csshover.htc内容 <public:attach event="ondocumentready" onevent=&qu ...

  5. ubuntu修改root密码

    1.我们在安装系统的时候我们会把系统的密码设置的比较简单,所以导致后面我们别人很容易操作我们的电脑.所以,我们就可以修改密码,你只要在系统上输入: sudo passwd root

  6. Oracle11g温习-第一章 3、ORACLE逻辑结构

    2013年4月27日 星期六 10:27 Oracle逻辑结构的相关数据字典: 记录各个表空间的详细信息. SYS @ prod > select tablespace_name,status ...

  7. OAF系统更新默认LOGO图标和主页环境描述

    更新EBS  OAF系统中默认的LOGO图标和主页的环境描述 左上角的ORACLE图片位置在  登录界面左上角oracle LOGO图片为GIF格式,大小155*20 背景透明.文件名为:FNDSSC ...

  8. 使用CLOB抛出数字或值错误异常

    今天在调试某个问题的时候,由于使用了很多循环,我需要都打印出来,试图使用clob整体处理之后再打印. 最后抛出此异常:数字或值错误. 网友解释如下: $ oerr ora 650206502, 000 ...

  9. 进程退出exit、_exit、abort

    分为正常退出,异常退出 正常退出的方法: 1.在main函数中执行return 2.调用exit函数 3.调用_exit  函数 ----------------------------------- ...

  10. JFace下ApplicationWindow关闭窗口时结束进程

    /** * Configure the shell. * @param newShell */ @Override protected void configureShell(Shell newShe ...