iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java如何停止线程
  • 571
分享到

Java如何停止线程

2023-06-15 03:06:32 571人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关Java如何停止线程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、线程停止基础知识interrupted(): 测试当前线程是否已经中断。该方法为静态方法,调用后会返回boolean

这篇文章给大家分享的是有关Java如何停止线程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、线程停止基础知识

  • interrupted(): 测试当前线程是否已经中断。该方法为静态方法,调用后会返回boolean值。不过调用之后会改变线程的状态,如果是中断状态调用的,调用之后会清除线程的中断状态。

  • isInterrupted(): 测试线程是否已经中断。该方法由对象调用

  • interrupt(): 标记线程为中断状态,不过不会中断正在运行的线程。

  • stop(): 暴力停止线程。已弃用。

二、停止线程方法1:异常法停止

   线程调用interrupt()方法后,在线程的run方法中判断当前对象的interrupted()状态,如果是中断状态则抛出异常,达到中断线程的效果。

   如下示例:

MyThread.java

public class MyThread extends Thread {    @Override    public void run() {        try {            for (int i = 0; i < 500000; i++) {                if (MyThread.interrupted()){                    System.out.println("已经是停止状态了,我要退出了!");                    throw new InterruptedException();                }                System.out.println("i = " + (i+1));            }            System.out.println("如果我被输出了,则代表线程没有停止");        } catch (InterruptedException e) {            System.out.println("在MyThread类中的run方法中被捕获");            e.printStackTrace();        }    }}

Main.java

public class Main {    public static void main(String[] args) {        try {            MyThread myThread  = new MyThread();            myThread.start();            Thread.sleep(100);            myThread.interrupt();        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("end!");    }}

结果如下:
i = 19115
i = 19116
i = 19117
i = 19118
i = 19119
end!

已经是停止状态了,我要退出了!
在MyThread类中的run方法中被捕获
java.lang.InterruptedException
 at com.book.interrupt_exit.MyThread.run(MyThread.java:15)

Process finished with exit code 0

三、停止线程方法2:在沉睡中停止

先将线程sleep,然后调用interrupt标记中断状态,interrupt会将阻塞状态的线程中断。会抛出中断异常,达到停止线程的效果。如下示例:

MyThread.java

public class MyThread extends Thread {    @Override    public void run() {        try {            System.out.println("run-----------start");            Thread.sleep(5000);            System.out.println("run-----------end");        } catch (InterruptedException e) {            System.out.println("在沉睡中被停止!进入catch,线程的是否处于停止状态:" + this.isInterrupted());            e.printStackTrace();        }    }}

Main.java

public class Main {    public static void main(String[] args) {        try {            MyThread myThread = new MyThread();            myThread.start();            Thread.sleep(2000);            System.out.println("状态:"+MyThread.interrupted());            myThread.interrupt();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

结果
run-----------start
状态:false
java.lang.InterruptedException: sleep interrupted
在沉睡中被停止!进入catch,线程的是否处于停止状态:false
 at java.lang.Thread.sleep(Native Method)
 at com.book.sleep_interrupt.MyThread.run(MyThread.java:13)

线程先调用interrupt标记中断状态,然后线程再睡眠。会抛出中断异常,达到停止线程的效果。如下:

MyThread1.java

public class MyThread1 extends Thread {    @Override    public void run() {        try {            for (int i = 0; i < 100000; i++) {                System.out.println("i = " + (i+1));            }            System.out.println("run begin");            //interrupt是做一个中断标记,当时不会去中断正在运行的线程,当该线程处于阻塞状态时就会进行中断            //因此,先进行interrupt后,再遇到sleep阻塞时,才会进行中断            Thread.sleep(200000);            System.out.println("run end");        } catch (InterruptedException e) {            System.out.println("先停止,再遇到了sleep! 进入catch!");            e.printStackTrace();        }    }}

Main1.java

public class Main1 {    public static void main(String[] args) {        MyThread1 myThread1 = new MyThread1();        myThread1.start();        myThread1.interrupt();        System.out.println("end!");    }}

结果:
i = 99993
i = 99994
i = 99995
i = 99996
i = 99997
i = 99998
i = 99999
i = 100000
run begin

先停止,再遇到了sleep! 进入catch!
java.lang.InterruptedException: sleep interrupted
 at java.lang.Thread.sleep(Native Method)
 at com.book.sleep_interrupt.MyThread1.run(MyThread1.java:19)

四、停止线程方法3:stop()暴力停止

线程调用stop()方法会被暴力停止,方法已弃用。该方法会有不好的后果:

  1. 强制让线程停止有可能使一些请理性的工作得不到完成。

  2. 定的对象进行了“解锁”,导致数据得不到同步的处理,出现数据不一致的问题(比如一个方法加上了synchronized,并在其中进行了一个长时间的处理,而在处理结束之前该线程进行了stop(),则未完成的数据将没有进行到同步的处理)

五、停止线程方法4:使用return停止线程

调用interrupt标记为中断状态后,在run方法中判断当前线程状态,如果为中断状态则return,能达到停止线程的效果。

备注:建议使用“抛异常”的方法来实现线程的停止,因为在catch块中还可以将异常向上抛,使线程停止的事件得以传播

常用的java框架有哪些

1.springMVCspring WEB mvc是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。2.shiro,Apache Shiro是Java的一个安全框架。3.mybatis,MyBatis 是支持普通 sql查询,存储过程和高级映射的优秀持久层框架。4.dubbo,Dubbo是一个分布式服务框架。5.Maven,Maven是个项目管理和构建自动化工具。6.RabbitMQ,RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。7.Ehcache,EhCache 是一个纯Java的进程内缓存框架。

感谢各位的阅读!关于“Java如何停止线程”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Java如何停止线程

本文链接: https://www.lsjlt.com/news/277204.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何停止线程
    这篇文章给大家分享的是有关Java如何停止线程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、线程停止基础知识interrupted(): 测试当前线程是否已经中断。该方法为静态方法,调用后会返回boolean...
    99+
    2023-06-15
  • java 停止线程
    stop()已经过时.停止线程:run()方法结束。开启多线程运行,通常代码都是循环结构。只要控制住循环,就可以让run()结束,也就结束了线程。...
    99+
    2023-06-05
  • 如何在java中停止线程
    这期内容当中小编将会给大家带来有关如何在java中停止线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
    99+
    2023-06-14
  • java多个线程运行如何停止
    在Java中,有几种常见的方法可以停止线程的运行: 使用标志变量:在线程的运行方法中,使用一个标志变量控制线程是否继续运行。当需要...
    99+
    2024-02-29
    java
  • java怎么停止线程池中的线程
    要停止线程池中的线程,可以使用 `ExecutorService` 接口提供的 `shutdown()` 方法来停止线程池。这个方法...
    99+
    2023-08-20
    java
  • Java停止线程的3种方法
    目录1.自定义中断标识符2.interrupt中断线程3.stop停止线程总结在 Java 中停止线程的实现方法有以下 3 种: 自定义中断标识符,停止线程。使用线程中断方法 int...
    99+
    2024-04-02
  • Java 多线程中stop停止线程实例分析
    这期内容当中小编将会给大家带来有关Java 多线程中stop停止线程实例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。package com.stop;import java.ut...
    99+
    2023-06-02
  • java线程停止的方法是什么
    Java线程停止的方法有以下几种:1. 使用标志位:在Thread类中定义一个boolean类型的变量作为标志位,当标志位为true...
    99+
    2023-10-10
    java
  • java怎么将线程停止又开始
    在Java中,可以使用`Thread`类的`stop()`和`start()`方法来停止和启动线程。要停止一个线程,可以调用`sto...
    99+
    2023-08-08
    java
  • 如何中止java线程
    这篇文章主要介绍“如何中止java线程”,在日常操作中,相信很多人在如何中止java线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何中止java线程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!错误...
    99+
    2023-06-16
  • golang停止爬虫线程
    随着互联网的普及和数据量的增大,网络爬虫已经成为各种行业中不可或缺的一环。而Go作为一门高性能的编程语言,也成为越来越多爬虫项目中的首选语言。但是,在实际的开发中,我们往往需要对爬虫线程进行控制,比如在需要停止或重新启动爬虫时。本文将从Go...
    99+
    2023-05-14
  • 详解Java停止线程的四种方法
    一、线程停止基础知识 interrupted(): 测试当前线程是否已经中断。该方法为静态方法,调用后会返回boolean值。不过调用之后会改变线程的状态,如果是中断状态...
    99+
    2024-04-02
  • Java线程的停止实现原理详解
    目录线程停止的原理如何正确停止线程在普通情况下停止线程在阻塞情况下停止线程线程在每次迭代后都阻塞停止线程的最佳实践错误停止的方法被弃用的stop,suspend和resume方法用v...
    99+
    2023-01-28
    Java线程的停止 Java线程原理
  • python怎么停止子线程
    在Python中,无法直接停止子线程。但可以通过设置一个标志位,在子线程中定期检查该标志位,以判断是否停止线程。以下是一个示例代码:...
    99+
    2023-09-04
    python
  • java中使用interrupt通知线程停止详析
    目录普通情况停止线程在可能被阻塞情况下停止线程在每次迭代后都阻塞的情况下停止线程两种停止线程最佳方法总结前言: 使用 interrupt 来通知线程停止运行,而不...
    99+
    2024-04-02
  • 如何停止mongodb进程
    停止mongodb进程的方法:1、在终端登录mongodb,使用“Crtl+C”关闭停止mongodb进程;2、使用数据库“db.shutdownServer();”命令关闭停止mongodb进程;3、使用mongod命令的shutdown...
    99+
    2024-04-02
  • java线程停止执行的方法有哪些
    Java线程停止执行的方法有以下几种:1. 使用标志位停止线程:在线程的执行过程中,通过设置一个标志位来控制线程是否停止执行。线程可...
    99+
    2023-08-08
    java
  • java如何停止运行指令
    在Java中,可以使用System.exit()方法来停止Java程序的运行。此方法以一个整数作为参数,用于表示程序的退出状态。通常...
    99+
    2023-10-10
    java
  • Python 强制停止多线程运行
    强制停止多线程运行 by:授客 QQ:1033553122   #!/usr/bin/env python # -*- coding:utf-8 -*-     __author__ = 'shouke'   import threadi...
    99+
    2023-01-31
    多线程 Python
  • 如何停止nodejs
    这篇文章主要介绍“如何停止nodejs”,在日常操作中,相信很多人在如何停止nodejs问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何停止nodejs”的疑惑有所帮助!接...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作