• 多线程学习笔记(三)线程的中断


    执行中断的三种方法

    1.stop() 废弃方法,开发中不要使用。因为一调用,线程就立刻停止,此时有可能引发相应的线程安全性问题
    2.Thread.interrupt方法
    3.自行定义一个标志,用来判断是否继续执行

    实例一:使用stop中断线程

    public class StopDome implements Runnable{
        @Override
        public void run() {
            while (true){
                System.out.println(Thread.currentThread().getName());
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            Thread thread = new Thread(new StopDome());
            thread.start();
            Thread.sleep(2000L);
            thread.stop();
        }
    }

    实例二:使用stop方法中断线程导致的线程不安全问题

    public class UnsafeStopDome extends Thread {
        public static int i = 0;
        public static int j = 0;
    
        @Override
        public void run(){
            i++;
            try {
                sleep(2000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            j++;
        }
    
        public void print()  {
            System.out.println("i的值为======》" + i );
            System.out.println("j的值为======》" + j );
        }
    
        public static void main(String[] args) throws InterruptedException {
            UnsafeStopDome unsafeStopDome = new UnsafeStopDome();
            unsafeStopDome.start();
            Thread.sleep(1000L);
            unsafeStopDome.print();
            unsafeStopDome.stop();//当现在执行中断时,导致了计算结果出错
        }
    }

    实例三:使用interrupt方法中断进程

    public class InterruptDome implements Runnable{
        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted()){
                System.out.println(Thread.currentThread().getName());
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            Thread thread = new Thread(new InterruptDome());
            thread.start();
            Thread.sleep(1000L);
            thread.interrupt();//会为线程打上,线程中断的标记,待线程运行完成以后,执行中断
        }
    }

    实例四:使用flag标志位结束进程

    public class FlagDome implements Runnable {
        public static volatile boolean FLAG = true;
    
        @Override
        public void run() {
            while (FLAG){
                System.out.println(Thread.currentThread().getName());
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            Thread thread = new Thread(new FlagDome());
            thread.start();
            Thread.sleep(1000L);
            FLAG=false;
        }
    }
  • 相关阅读:
    windows 查看某个端口号被占用情况
    C# 配置文件ini操作类
    C#:如何解决WebBrowser.DocumentCompleted事件的多次调用
    什么是异或_异或运算及异或运算的作用
    UID卡、CUID卡、FUID卡的区别
    C#获取窗口大小和位置坐标 GetWindowRect用法
    C#中SetWindowPos函数详解
    C#让电脑发声,播放声音
    C#自动缩进排列代码的快捷键 c# 代码重新排版 变整齐
    安卓手机USB无法共享、上网或卡顿的解决方法
  • 原文地址:https://www.cnblogs.com/huangzhimin/p/11555617.html
Copyright © 2020-2023  润新知