首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 多线程学习(2)——停止线程

在Java中,有以下三种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,即run方法完成后,线程终止; 使用stop方法,强行终止线程,不推荐使用,可能会产生不可预料的后果; 使用interrupt...使用interrupt方法停止线程 interrupt()方法仅仅是在当前线程中打了一个停止标记,并不会真正的停止线程。...可以看出调用interrupt方法并没有停止线程。...判断线程是否是停止状态 Thread.java类中提供了两种方法判断线程是否是停止状态: this.interrupted():测试当前线程是否已经中断。执行后具有将状态置清除为false的功能。...System.out.println("处于停止状态,退出线程!")

58930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    话说 线程创建&启动&停止

    线程创建&启动&停止 线程啊是个好东西,但是平时工作很少自己创建线程,所以一些基础的操作可能就不容易记起来,这篇文章常看看有益身心健康 1....这是一个线程03! 这是一个线程04! 这是一个线程05! 线程启动之后就会执行run方法 3. 停止线程/中断 3.1....Thread.sleep(5000); // 停止 t1.stop(); 结果: 对象去洗澡了 钻被窝等着......1000); flag = false; } } 多次输出结果: 505、525、507、512 可以看到每次输出结果是不确定的 , 这种方式只能保证到达某个条件了就停止线程...但是不能控制线程准确点停止 比如你想让一个线程循环100次就停止 很难准确控制 3.5 interrupt 结束 也算标志位 但是比volatile高级一点 比如sleep、wait等操作会被中断

    1.2K00

    线程停止与暂停

    1.停止线程     停止线程不像停止一个循环break一样干脆。   停止一个线程意味着在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作。...停止一个线程可以用Thread.stop(),但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且已经作废的方法。   ...大多数停止一个线程用Thread.interrupt()方法,尽管方法的名称是”中止,停止”的意思,但这个方法不一定会停止一个正在运行的线程,还需要加入一个判断才可以完成线程停止。  ...在Java中有3种方法可以停止正在运行的线程:   (1)使用退出标志使线程正常终止,也就是当run方法完成后线程终止。   ...1.停止不了的线程     调用thread.interrupt()方法,但是此方法并不会马上停止线程,只是在当前线程打了一个停止的标记,并不是真正的停止线程

    5.6K20

    线程 如何停止一个线程

    线程执行完不就退出了,说停止有什么意义? 当然有意义,意义在于,一般创建线程后,如果是一次性的线程,执行结束就可以了,不用管它。...如果是一个一直需要保持运行,而需要在某一时刻才需要停止线程,就需要关注线程是如何退出的。 退出方式 退出标志: 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。...interrupt 方式 方式:主动中断线程。 上面不是说不要使有stop这种方式来停止吗,这里还用 interrupt 来主动中断。...interrupt 和 stop 不同,使用这个方法并不会让线程立即中断,而是给线程打一个标志,线程会在合适的时机退出。...i=0; i<5000; i++){ if (i == 100) { // 打印这一句话后,后续还会打印 i= 后面的数字,证明线程并没有立即停止

    22020

    线程专题---如何停止一个线程

    最近做项目及看别人源码过程中涉及到多线程的知识,感觉自己多线程方面还不够系统,所以需要系统的总结一下这方面的知识。...先从如何停止一个线程开始: 这里先记下最关键的一点: 停止线程:应该代码逻辑上停止线程中的任务从而让线程自动停止,而不是强制停止线程自身 下面先问自己几个问题,由浅入深的学习线程知识: 1、是否了解线程的用法...(2)、对于多线程共享变量来说不安全,例如AB两线程都对同一变量var操作,A线程突然被stop了,var就处在不确定状态,B线程再操作var可能造成crash等。...4、既然stop,suspend 不可用,如何设计可以随时被中断而取消的任务线程线程是与任务强绑定的,线程的结束就是任务的结束。任务结束的时候让线程自动停止。...所以应该代码逻辑上实现线程中任务的停止线程的执行模式应该是协作的任务执行模式。 满足以下几点: 通知目标线程自行停止,而不是强制停止。 目标线程应当具备处理中断的能力。

    64320

    Java并发编程之线程停止

    简介 一般情况下,线程执行完成后就会结束,但有的时候我们可能需要在它正常执行完成前就停止它,可以考虑使用以下三种方法: 使用Thread中的stop方法,这个方法已经被标为已废弃,不推荐使用,原因是stop...使用自定义标志停止线程 这里定义了一个变量flag,主线程会在3秒后将flag设置为false,当flag为false的时候,run方法里面的循环就会结束,线程也就停止了。...MyThread(); myThread.start(); Thread.sleep(3000); myThread.flag = false; } } 使用线程中断机制停止线程...线程中断有关的三个方法: interrupt(),中断线程。...1.主线程在3秒后更改flag状态,但是线程还处于sleep()阻塞中,需要等到sleep()时间结束也就是10秒后线程停止

    63900

    安全优雅地停止Java线程

    文/朱季谦 首先,先抛出一个问题,该如何安全而优雅地停止线程?...这道问题的背后,可以很小,小到只是简单终止一个Thread线程,也可以很大,大到例如Dubbo应用的优雅下线......它们其实都有一个共同之处,即非一刀断式地暴力停止某个进程或者线程,而是能够实现在终止过程中...,有机会去清理资源,跑完剩余的任务,最后没有任何资源在运行了,才做最后结束,这才算安全而优雅地停止。...在Java多线程当中,停止线程的方法,其中,有一个已经过期而不建议使用的方式stop(),它停止线程的方式比较简单粗暴,不保证线程的资源正常释放就直接停止了,也就意味着,可能还有线程正在跑,没有运行完成...,Thread.currentThread().isInterrupted()返回的是true,即可结束该线程,同时,停止资源i++的继续运行 while (!

    77840

    Java | 如何停止一个线程

    ,并阐述无误 目录 如何停止一个线程【概述】 为何不能简单地停止一个线程?...【Deprecated v.不赞成的;反对的;】 以上是JDK提供的停止线程的方法, 但是很早就被废弃了; 主要就是说线程被直接停止掉是不安全, 涉及到了很多锁之类的细节问题;【下面细说】 所以不能直接简单地停止线程...; 需要设计一个方案, 可以在逻辑上, 随时中断被取消的任务线程; 因为物理上没办法简单停止掉了; 但是我们可以结束掉线程中的任务; 为何不能简单地停止一个线程?...而假设的话,假设线程1可以被干掉,也就是stop(), 假设此时线程1被干掉(停止)了,则会立即释放内存锁; 线程3马上拿到内存锁并加锁,进入就绪状态,等待CPU时间片; ?...^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 协作的任务执行模式【正确停止线程的思路】 通知目标线程自行结束,而不是强制停止 逻辑上,线程【Thread

    1.8K20

    【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)

    线程停止 线程停止常用方法 :  -- 1. 使用 interrupt() 方法停止线程; -- 2. 使用退出标志, 让线程正常退出; -- 3....使用 interrupt() 方法停止线程 (1) 线程无法立即停止 interrupt() 使用说明 :  -- 打标记 : 调用该方法, 不能马上停止线程, 只是在当前线程打了一个停止标记; 代码示例... 100ms 就中断了线程, 但是线程还是执行完毕了, 说明线程并没有在调用 interrupt() 方法后立即停止; (2) 线程停止状态判定 两个线程停止状态判定的方法 :  -- 1. interrupted...异常法停止线程 (1) 线程循环中正常退出停止 退出方法 : 正常退出线程; -- 1. 前提 : 线程中执行一个循环; -- 2....立即停止 : 调用 stop() 方法停止线程, 比较暴力, 会立即停止当前的线程; -- 2.

    3.2K20

    Java中停止线程的3种方式

    在 Java 中停止线程的实现方法有以下 3 种: 自定义中断标识符,停止线程。 使用线程中断方法 interrupt 停止线程。 使用 stop 停止线程。...其中 stop 方法为 @Deprecated 修饰的过期方法,也就是不推荐使用的过期方法,因为 stop 方法会直接停止线程,这样就没有给线程足够的时间来处理停止前的保存工作,就会造成数据不完整的问题...而自定义中断标识也有一些问题,所以综合来看,interrupt 方法才是最理想的停止线程的方法,接下来我们一起来看它们的具体差异。...3.stop停止线程 stop 方法虽然可以停止线程,但它已经是不建议使用的废弃方法了,这一点可以通过 Thread 类中的源码发现,stop 源码如下: 从上面的图片可以看出,stop 方法是被...总结 本文介绍了停止线程的 3 种方法: 自定义中断标识符的停止方法,此方法的缺点是不能及时响应中断请求; 使用 interrupt 中断线程方法,此方法是发送一个中断信号给线程,它可以及时响应中断,也是最推荐使用的方法

    77210

    Java:正确停止线程任务的实现方式

    ---- 前沿 ---- 在Java中没有一种安全的抢占式方法来停止线程任务。只有一些协作式的机制,使请求取消的任务和代码都遵循一种协商好的协议。...另一种协作机制是:使用线程中断,线程可以通过这种机制来通知另一个线程。...设置“已请求取消”标志来停止线程任务 ---- 示例:Java17源码中的 java.util.stream.AbstractShortCircuitTask 使用volatile boolean canceled...注意:调用interrupt()方法并不意味着立即停止目标编程正在进行的工作,而只是传递了请求中断的消息。 使用静态的interrupted()方法时应该小心,因为它会清除当前线程的中断状态。...示例: ch.qos.logback.core.net.server.RemoteReceiverStreamClient#run 小结 ---- 正确停止线程任务的实现方式: 1、设置“已请求取消

    29830

    线程基础知识(全面):创建线程线程状态如何变化、wait()、notify()、sleep()、停止线程

    中断线程 用于停止线程 // 调用该方法时并不需要获取Thread实例的锁。...,而是等待线程自然运行至结束停止,但是在我们实际开发中,会有很多情况中我们是需要提前去手动来停止线程,比如程序中出现异常错误,比如使用者关闭程序等情况中。...在这些场景下如果不能很好地停止线程那么就会导致各种问题,所以正确地停止程序十分重要。...理解这一点很重要,如果中断后,线程立即无条件退出,那么就会和 stop() 方法没有任何区别,会导致线程不安全问题即调用interrupt()方法仅仅是在当前线程中打了一个停止的标记,并不是真的停止线程...方法8)wait与sleep有何不同都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态但方法归属、醒来时机、锁特性不同9)如何停止一个正在运行的线程有四种方式可以停止线程run()方法运行完毕,线程自动结束使用退出标志

    19910

    线程笔记(四)线程的状态,线程停止线程的休眠,线程礼让,join,线程优先级,守护线程

    线程 线程方法 线程停止(建议) 线程的休眠 线程礼让 A和B 两个线程,当CPU执行B的时候,B进行礼让,那么就离开cpu,这个时候B就变为就绪状态,CPU就重新 在A线程和B线程之间进行选择...join 相当于插队 线程的优先级 利用代码设置线程的优先级 和 获取线程的优先级 public class Priority { public static void main(...main函数就是用户线程 gc 垃圾回收机制 就是 守护线程 当我们执行一段程序,里面有很多的线程,其中一个线程是守护线程,那么当其他线程执行完毕,这个守护线程就关闭了,虚拟机是不管守护线程是否关闭的..."); } System.out.println("我结束了"); } } 思路: 我们参加一个 用户线程,一个守护线程,如果一个线程要变为守护线程,那么必须手动设置为...当我们用户线程走完,整个就结束了,虚拟机是不管守护线程是否走完的。 守护线程不用管

    65030
    领券