首页 > 编程语言 > 详细

线程停止

时间:2021-04-25 14:25:15      阅读:9      评论:0      收藏:0      [点我收藏+]

线程停止

  • 线程状态

    • JDK中用Thread.State类定义了线程的几种状态
    • 要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:
      • 新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
      • 就绪:处于新建状态的线程被start( )后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源
      • 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run( )方法定义了线程的操作和功能
      • 阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态
      • 死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束

    技术分享图片

    • 线程方法

    方法 说明
    setPriority(int newPriority) 更改线程的优先级
    static void sleep(long millis) 在指定的毫秒内让正在执行的线程进入休眠状态
    void join() 等待该线程终止
    static void yield() 暂停正在执行的线程对象,并执行其他的线程
    void interrupt() 中断线程,别使用这个方法
    boolean isAlive() 测试线程是否处于活动状态
  • 停止线程(使用标志位)

    • 不推荐使用JDK提供的 stop()、 destroy()方法。【已废弃】
    • 推荐线程自己停止下来
    • 建议使用一个标志位进行终止变量 当flag=false,则终止线程运行。
      public class TestStop implements Runnable{
          //1.设置一个标志位
          boolean flag = true;
          @Override
          public void run() {
              int i = 0;
              while (flag){
                  System.out.println("run---thread"+i++);
              }
          }
          //2.设置一个公开的方法停止线程,转换标志位
          public void stop(){
              this.flag = false;
          }
    
          public static void main(String[] args) {
              TestStop testStop = new TestStop();
              new Thread(testStop).start();
    
              for (int i = 0; i < 500; i++) {
                  System.out.println("执行线程"+i);
                  if (i == 300){
                      //调用stop方法切换标志位,停止线程
                      testStop.stop();
                      System.out.println("线程该停止了=====================");
                  }
              }
          }
      }
    

线程停止

原文:https://www.cnblogs.com/saxonsong/p/14685256.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!