首页 > 其他分享 >终止线程 中断标志 vs Interrupt() vs stop()

终止线程 中断标志 vs Interrupt() vs stop()

时间:2024-08-14 12:18:40浏览次数:11  
标签:java Thread stop System vs 线程 thread1 Interrupt sleep

退出标志

import lombok.SneakyThrows;

import java.text.SimpleDateFormat;

public class T {

    static boolean flag = true;

    @SneakyThrows
    public static void main(String[] args) {

        Thread thread1 = new Thread(() -> {
            try {
                while (flag) {
                    Thread.sleep(3000);
                    System.out.println(Thread.currentThread().getName() + ":"
                            + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS").
                            format(System.currentTimeMillis()));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }, "线程1");

        thread1.start();

        Thread.sleep(6000);
        flag = false;
    }
}

interrupt()

打断阻塞的线程(sleep/wait/joing),线程会抛出InterruptException异常
打断正常的线程,可以根据打断状态标记是否退出线程

阻塞线程

import lombok.SneakyThrows;

import java.text.SimpleDateFormat;

/*
线程1:2024-08-14 11:53:44 437
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at T.lambda$main$0(T.java:16)
	at java.lang.Thread.run(Thread.java:748)
**/
public class T {

    static boolean flag = true;

    @SneakyThrows
    public static void main(String[] args) {

        Thread thread1 = new Thread(() -> {
            try {
                while (true) {
                    Thread.sleep(3000);
                    System.out.println(Thread.currentThread().getName() + ":"
                            + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS").
                            format(System.currentTimeMillis()));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }, "线程1");

        thread1.start();

        Thread.sleep(6000);
        thread1.interrupt();
    }
}

非阻塞线程

import lombok.SneakyThrows;

import java.text.SimpleDateFormat;

/*
正常退出
**/
public class T {

    static boolean flag = true;

    @SneakyThrows
    public static void main(String[] args) {

        Thread thread1 = new Thread(() -> {
            try {
                while (true) {
                    System.out.println(Thread.currentThread().getName() + ":"
                            + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS").
                            format(System.currentTimeMillis()));
                    Thread currentThread = Thread.currentThread();
                    boolean interrupted = currentThread.isInterrupted();
                    if (interrupted) {
                        System.out.println("打断状态" + interrupted);
                        break;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }, "线程1");

        thread1.start();

        Thread.sleep(1000);
        thread1.interrupt();
    }
}

stop()

stop方法的作用是强制结束线程,就和kill -9一个效果,如果用stop来停止线程会直接结束线程,无视线程中对数据逻辑操作的完整性,这样是不安全。

import lombok.SneakyThrows;

import java.text.SimpleDateFormat;

public class T {
    @SneakyThrows
    public static void main(String[] args) {

        Thread thread1 = new Thread(() -> {
            try {
                while (true) {
                    Thread.sleep(3000);
                    System.out.println(Thread.currentThread().getName() + ":"
                            + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS").
                            format(System.currentTimeMillis()));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }, "线程1");

        thread1.start();

        Thread.sleep(7000);
        thread1.stop();
    }
}

标签:java,Thread,stop,System,vs,线程,thread1,Interrupt,sleep
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18358641

相关文章

  • wait() vs sleep()
    wait(timeout)释放对象锁importlombok.SneakyThrows;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){Objecto=newObject();Threadthread1=newThread(()->{try{synchronized......
  • 如何获取VS Code扩展的版本更新信息
    获取VSCode扩展的版本更新的需求因为企业内部有架设私有扩展管理器的要求,但是对于一些官方市场的插件,希望可以自动获取这些扩展的更新并上传至私有扩展管理器。于是就有了本篇介绍的需求:通过API的方式获取VSCode扩展的更新。关于VSCode的私有扩展管理器可以参考:VS......
  • NOI Linux VSCode使用指北
    NOILinuxVSCode使用指北安装NOILinux不是已经帮你做好这一步了吗?准备首先在这里对VSC的界面做一个介绍。1.终端VSC相对于其他的编辑器的优势是有一个非常直观的内置终端,这也让我们可以专心在这一个窗口内编辑和调试代码。召唤终端的快捷键是Ctrl+Shift+P!召唤终......
  • 了解VSCode:一款功能强大的开源代码编辑器
    VisualStudioCode(简称VSCode)是由微软开发的一款免费、开源的源代码编辑器。它以其强大的功能、丰富的插件生态系统、跨平台兼容性以及出色的用户体验,成为了广大开发者的首选工具。以下是对VSCode的详细介绍,涵盖其特点、功能、安装与配置、以及扩展生态等方面。一、VSCode的......
  • vs2022使用方法
    文章原创,内容来自b站up主microfrank,本文从vs2022安装问题,怎么使用,项目里各个文件的意义,以及代码分享等功能1.installer安装器讲解:开始菜单搜索vis,其中有一个installer后缀,供以后重新设置,bug修复,卸载等2.登录以及激活:登录:用微软账户邮箱登录()密码()3.创建项目以及认识视图窗口: ......
  • VS Code Server的离线安装过程
    1.服务器上vscode-server安装取决于你本地使用的vscode版本,版本用commit_id来区别。首先打开vscode,点击帮助-关于(Help->about可以查看),如下这个commitid也就是你本地Vscode版本的commitid:2.vscode-server的下载链接如下:https://update.code.visualstud......
  • VS Code 修改默认插件安装位置
    先将扩展插件extensions从默认安装路径剪切到你真正想要存放的位置将C:\Users\(用户名)\.vscode\extensions\剪切到存放的位置,此处以D:\extensions为例✨注意不要与VSCode安装目录放在一起,vscode更新时会删除的使用mklink命令创建快捷方式,使用\D参数创建软链接Micr......
  • VS2022+QT6.7.2 子线程与主线程通信(详细)(注释)
    需求:主线程将需要计算的数据发送给子线程,子线程将计算后的结果返回给主线程。实现逻辑:(前提:子线程类已创建好,并使用start方法启动子线程)1、主线程的mysignal1信号触发子线程的myslot2槽函数方法:connect(this,&QtWidgetsApplication13::mysignal1,st,&mythread::myslot2);......
  • LVS+Keepalived群集
    目录keepalived的热备方式keepalived的安装与服务一、使用Keepalived双机实现热备案例1:主服务器配置2:备用服务器的配置3:测试虚拟ip的连通性二、LVS+Keepalived高可用性1:主调度器配置健康状态检查的方式2:从调度器配置3:服务器池配置(1)web1网络的配置(2)web2服务器配置......
  • 修改『Visual Studio Code(VS Code)』插件默认安装路径的方法
    前言作者希望将『VisualStudioCode(以下简称为“VSCode”)』的插件安装在数据盘(D盘),用于统一管理,因此需要修改VSCode插件安装路径。VSCode插件默认的安装位置为:C:\Users\{个人用户名}\.vscode\extensions。方法一:修改快捷方式目标路径(★★☆)1.确保『code』快捷命令的可用......