• 停止线程方式


    停止线程方法_stop方法(已过时)

    停止线程方法_定义标记(run方法结束)

    怎么控制线程的任务结束:

      线程任务中都会有循环结构,只要控制住循环就可以结束任务。控制循环通常就用定义标记来完成。

     1 class StopThread implements Runnable{
     2     private boolean flag = true;
     3     public void run(){
     4         while(flag){
     5             System.out.println(Thread.currentThread().getName()+".....");
     6         }
     7     }
     8     public void setFlag(){
     9         flag = false;
    10     }
    11 }
    12 class StopThreadDemo {
    13     public static void main(String[] args) {
    14         StopThread st = new StopThread();
    15 
    16         Thread t1 = new Thread(st);
    17         Thread t2 = new Thread(st);
    18 
    19         t1.start(); 
           t2.start();
    22 23 24 int num = 1; 25 for(;;){ 26 if(++num==50){ 27 st.setFlag(); 28 break; 29 } 30 System.out.println("main...."+num); 31 } 32 System.out.println("over"); 33 } 34 }

    但是如果线程处于了冻结状态,无法读取标记。如何结束:

        可以使用Thread类中的interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu的执行资格。

        因为强制动作会发生了InterruptedException,记得要处理,在catch中处理的时候 将标记改为false就可以结束循环,线程也就结束了

     1 class StopThread implements Runnable{
     2     private boolean flag = true;
     3     public synchronized void run(){
     4         while(flag){
     5             try{
     6                 wait();//t0 t1    使用这个方法是强制性唤醒的会发生异常,就执行catch里的代码,然后将标记改为false
     7             }catch (InterruptedException e){
     8                 System.out.println(Thread.currentThread().getName()+"....."+e);
     9                 flag = false;
    10             }
    11             
    12             System.out.println(Thread.currentThread().getName()+"......++++");
    13         }
    14     }
    15     public void setFlag(){
    16         flag = false;
    17     }
    18 }
    19 class StopThreadDemo {
    20     public static void main(String[] args) {
    21         StopThread st = new StopThread();
    22 
    23         Thread t1 = new Thread(st);
    24         Thread t2 = new Thread(st);
    25 
    26         t1.start();
    27         t2.start();
    29 
    30 
    31         int num = 1;
    32         for(;;){
    33             if(++num==50){
    34                 t1.interrupt();
    35                 t2.interrupt();
    36                 break;
    37             }
    38             System.out.println("main...."+num);
    39         }
    40         System.out.println("over");
    41     }
    42 }
  • 相关阅读:
    Django ORM多表操作
    Django 单表查询作业-笔记
    python 2 编码问题
    HTML-Bootstrap下载和基本使用
    Django ORM单表操作之增删改查
    Django ORM简介和单表创建的设置和过程
    Django --总结 之URL路由控制 视图相应,视图请求,和模板语法
    Django URL控制器
    JAVA编程
    UMI 的原理分析带有 UMI 的数据
  • 原文地址:https://www.cnblogs.com/LO-ME/p/3574608.html
Copyright © 2020-2023  润新知