• 6.5Java线程终止状态


    6.5Java线程终止状态

    具体状态

    • 线程终止

    • 线程暂停

    • 线程礼让

    • 线程插队


    线程停止

    两种方式:

    • 线程体正常执行完毕--->执行完线程体内的代码

    • 人为设置停止

      • 不使用JDK提供的stop()/destory()方法

      • 设置一个布尔类型的变量(相当于开关),boolean == false时,线程终止运行

      • 示例:

        • class Study implements Runnable{
             //线程类中定义线程体使用的开关标识--->布尔类型变量
             private boolean flag = true;
             //重写run方法
             @Override
             public void run(){
                 //线程体使用该标识
                 while(flag){
                     System.out.println("Study Thread!");
                }
            }
             
             //对外提供改变标识
             public void stop(){
                 this.flag = flag;
            }
          }

    实现线程停止:--->提供一个标识位给外部调用(相当于一个布尔开关)

    package iostudy.threadstate;

    /**
    * 测试中断停止线程的方法
    * 1、线程正常执行完毕--->线程执行完线程内部的代码块
    * 2、外部干涉--->设置一个标识位(相当于开关)不要使用stop或者destroy方法
    * @since JDK 1.8
    * @date 2021/6/5
    * @author Lucifer
    */
    public class TerminateThread implements Runnable{

       //加入标识,标识线程体是否可以运行
       private boolean flag = true;
       private String name;

       //构造器传入name
       public TerminateThread(String name){
           this.name = name;
      }

       //重写线程接口的run方法
       @Override
       public void run(){

           int i = 0;
           //关联标识:--->true运行、false停止
           while (flag){
               System.out.println(name + "--->" + i++);
          }
      }

       //对外提供方法改变标识
       public void terminate(){
           this.flag = false;
      }

       //启动线程
       public static void main(String[] args) {

           /*创建线程*/
           TerminateThread tt = new TerminateThread("Lucifer");

           /*启动线程--->调用start方法(进入就绪状态)*/
           new Thread(tt).start();

           /*控制线程次数*/
           for (int i = 0; i <= 99; i++){
               /*设置一个次数,如果达到这个次数调用实体类方法传入开关的值*/
               if (i == 88){
                   tt.terminate(); //调用控制开关的方法--->传入一个开关的布尔值(第88次停止)--->这里没有人为的阻塞
                   System.out.println("Over!!!");
              }
               System.out.println("main--->" + i);
          }
      }
    }

     

    It's a lonely road!!!
  • 相关阅读:
    node爬取html乱码
    mysql字段有中英文,数字按照升序/降序 排序
    解决git反复输入密码的问题
    vue在jsx中使用for循环
    vscode插件篇
    table无法控制宽度
    console输出彩色字体
    原生js实现vue组件功能
    ES6中的proxy
    面向对象编程
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14852803.html
Copyright © 2020-2023  润新知