zoukankan      html  css  js  c++  java
  • 14,多线程-停止线程

    一般情况

    package songyan;
    /*
    如何停止线程?
    只有一种,run方法结束。
    开启多线程运行,运行代码通常是循环结构。
    
    只要控制住循环,就可以让run方法结束,也就是线程结束。
    
    */
    
    class Demo implements Runnable{
        boolean flag=true;
        public void run()
        {
            while(flag)
            {            
                System.out.println(Thread.currentThread().getName()+"***run");
            }
        }
        public void changeFlag()
        {
            flag=false;
        }
    }
    public class test {
        public static  void main(String[] args)
        {
            Demo d= new Demo();
            Thread t= new Thread(d);
            t.start();
            
            int count =0;
            
            while(true)
            {
                count++;
                System.out.println("main***"+count);
                if(count==600)
                {
                    d.changeFlag();
                    break;
                }
                
            }
        }
    }

    特殊情况(线程冻结)

    package songyan;
    /*

    特殊情况:
    当线程处于了冻结状态。
    就不会读取到标记。那么线程就不会结束。

    
    

    当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。
    强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。

    
    

    Thread类提供该方法 interrupt();

    */
    
    class Demo implements Runnable{
        boolean flag=true;
        public synchronized void run()
        {
            while(flag)
            {            
                
                try {
                    this.wait();
                } 
                catch (Exception e) 
                {
                    System.out.println("jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
                }
                System.out.println("run ******888888888888888888888888888888888888*");
            }
        }
        public void changeFlag()
        {
            flag=false;
        }
    }
    public class test {
        public static  void main(String[] args)
        {
            Demo d= new Demo();
            Thread t= new Thread(d);
            t.start();
            
            int count =0;
            
            while(true)
            {
                count++;
                System.out.println("main***"+count);
                if(count==600)
                {
                    d.changeFlag();
                    t.interrupt();//中断线程(让线程重新获得运行资格)
                    break;
                }
                
            }
        }
    }
  • 相关阅读:
    HiLink & LiteOS & IoT芯片 让IoT开发简单高效
    HiCar基本功能介绍
    HiCar技术概述
    docker 笔记 3
    drools规则引擎笔记 与 代码demo
    Spring Reactive Reactor WebFlux Flux Mono 是否能完全取代多线程编程 ?
    webflux demo 1
    阅后归档
    阅后归档
    POJ3252 Round Numbers(数位dp)
  • 原文地址:https://www.cnblogs.com/exexex/p/8435077.html
Copyright © 2011-2022 走看看