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);
      }
  }
}

 

posted @ 2021-06-05 15:10  俊king  阅读(112)  评论(0编辑  收藏  举报