zoukankan      html  css  js  c++  java
  • 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!!!
  • 相关阅读:
    设计模式之抽象工厂模式
    MQ任意延时消息(三)基于服务端实现
    MQ任意延时消息(二)基于客户端实现
    MQ任意延时消息(一)实现原理概述
    sqlyog报错2058
    base标签的作用
    相对路径和绝对路径的解释
    自定义Tomcat部署目录
    常用正则表达式
    接口的结构定义
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14852803.html
Copyright © 2011-2022 走看看