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

线程 如何停止一个线程

线程执行完不就退出了,说停止有什么意义? 当然有意义,意义在于,一般创建线程后,如果是一次性的线程,执行结束就可以了,不用管它。...如果是一个一直需要保持运行,而需要在某一时刻才需要停止线程,就需要关注线程如何退出的。 退出方式 退出标志: 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。...interrupt: 使用interrupt方法中断线程。 可以但不推荐: 不推荐使用 stop、suspend及resume 方法。stop 相当于电脑断电关机一样,是不安全的方法。...interrupt 方式 方式:主动中断线程。 上面不是说不要使有stop这种方式来停止吗,这里还用 interrupt 来主动中断。...interrupt 和 stop 不同,使用这个方法并不会让线程立即中断,而是给线程打一个标志,线程会在合适的时机退出。

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

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

先从如何停止一个线程开始: 这里先记下最关键的一点: 停止线程:应该代码逻辑上停止线程中的任务从而让线程自动停止,而不是强制停止线程自身 下面先问自己几个问题,由浅入深的学习线程知识: 1、是否了解线程的用法...4、既然stop不可用,如何设计可以随时被中断而取消的任务线程? 5、是否熟悉interrupt中断的用法? 6、使用boolean标志位的好处有哪些?...4、既然stop,suspend 不可用,如何设计可以随时被中断而取消的任务线程线程是与任务强绑定的,线程的结束就是任务的结束。任务结束的时候让线程自动停止。...所以应该代码逻辑上实现线程中任务的停止线程的执行模式应该是协作的任务执行模式。 满足以下几点: 通知目标线程自行停止,而不是强制停止。 目标线程应当具备处理中断的能力。...线程内置Interrupt() 的使用 下面举例如何使用Interrupt()方法: InterruptableThread.java类: public class MutileThread {

61920

Java | 如何停止一个线程

要点 线程的用法 线程的stop方法 ---- 线程stop过程中存在的问题 interrupt中断的用法 ---- 解释清楚使用boolean标志位的好处 interrupt底层的细节 能转移话题到线程安全...,并阐述无误 目录 如何停止一个线程【概述】 为何不能简单地停止一个线程?...interrupted_与interrupt()的源码 boolean标志位方式 interrupt 与 boolean标志位 两种方式的区别 如何停止一个线程【概述】 ?...【Deprecated v.不赞成的;反对的;】 以上是JDK提供的停止线程的方法, 但是很早就被废弃了; 主要就是说线程被直接停止掉是不安全, 涉及到了很多锁之类的细节问题;【下面细说】 所以不能直接简单地停止线程...3; 这个时候如果线程3还把这个错误的数据拿去实际使用, 那整个过程就很危险了; 到这里我们发现, 其实一开始线程1就不该允许被简单粗暴地直接停止掉, 不然只会对后续的进程运行埋下隐患; 由此

1.8K20

1.7停止线程

线程停止:在线程处理完任务之前,停掉正在做的操作,也就是放弃当前操作。 在java中有三种方法可以实现线程停止使用退出标志,使线程正常退出,也就是当run方法执行完后线程终止。...使用stop强行终止线程。但是不推荐这个方法,因为stop与suspend以及resume一样,都是作废过期的方法,使它们产生不可预期的结果。 使用interrupt()方法中断线程。...调用对象的this.isInterrupt(),不过由于这是展示如何停止一个线程的,标题名还是异常法。。...不论是先睡眠,然后再睡眠中被停止,还是先停止,在睡眠。都会报错。 1.7.5能停止线程——暴力停止使用stop()方法停止线程是暴力的。...(仅仅username被修改,线程在休眠的过程中被杀死,导致密码的修改没有进行)。 1.7.8使用return停止线程使用interrupt()与return结合使用也能实现停止线程的效果。

1.8K00

面试官:如何停止一个线程

如何停止一个线程?这是本人面试中遇到的一个问题,回答的不是很好,在这里总结一下。 停止线程是指终止线程的运行,让线程从运行状态转变为终止状态。...资源被占用:当线程运行时占用了某些资源,而其他线程需要使用这些资源时,需要停止线程来释放这些资源。 等待超时:当线程等待某个事件的发生,但是等待时间超过了预定的时间,需要停止线程并执行下一步操作。...通常有两种方式来优雅地停止线程使用标志位和使用 interrupt() 方法 使用标志位 使用标志位是在线程的 run() 方法中添加一个标志位,用于控制线程的执行。...使用标志位这种方式其实就是一种思想,比如你也可以在符合条件的时候使用return或者其他操作停止线程,这都是可以的。...使用interrupt()方法 使用 interrupt() 方法来中断线程的执行,调用该方法会设置线程的中断状态为 true,但并不会强制停止线程的执行。

20110

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

常见面试题4.1 新建T1、T2、T3 三个线程如何保证它们按顺序执行可以使用线程中的join方法解决。...(我放弃 cpu,但你们还可以用)而 sleep 如果在 synchronized 代码块中执行,并不会释放对象锁(我放弃 cpu,你们也用不了)4.4 如何停止一个正在运行的线程通常情况下我们是不会去手动去停止的...,而是等待线程自然运行至结束停止,但是在我们实际开发中,会有很多情况中我们是需要提前去手动来停止线程,比如程序中出现异常错误,比如使用者关闭程序等情况中。...有四种方式可以停止线程run()方法运行完毕,线程自动结束使用退出标志,使线程正常退出,也就是当run方法完成后线程终止使用stop方法强行终止(不推荐,因为stop和suspend、resume一样,...方法8)wait与sleep有何不同都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态但方法归属、醒来时机、锁特性不同9)如何停止一个正在运行的线程有四种方式可以停止线程run()方法运行完毕,线程自动结束使用退出标志

13310

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

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

55830

线程停止与暂停

1.停止线程     停止线程不像停止一个循环break一样干脆。   停止一个线程意味着在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作。...在Java中有3种方法可以停止正在运行的线程:   (1)使用退出标志使线程正常终止,也就是当run方法完成后线程终止。   ...(2)使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和suspend、resume一样,都是过期作废的方法。   (3)使用interrupt方法中断线程。...如何测试main线程的中断效果: package cn.qlq.thread.three; import org.slf4j.Logger; import org.slf4j.LoggerFactory...2.暂停线程   暂停线程意味着可以恢复运行。在Java多线程编程中,可以使用suspend()方法暂停线程使用resume()恢复线程。这两个方法都是过期作废的方法。

5.5K20

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

线程创建&启动&停止 线程啊是个好东西,但是平时工作很少自己创建线程,所以一些基础的操作可能就不容易记起来,这篇文章常看看有益身心健康 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.1K00

如何停止中断一个运行中的线程

# 面试题: 如何正确地停止/中断一个运行中的线程 哪些情况下线程停止 如何处理不可中断的阻塞 # 核心思想 使用interrupt()来通知,而不是强制。...package com.futao.learn.threads.c_如何停止线程; /** * 正确停止线程---run()方法内没有sleep()或者wait()方法 * * @author...线程代码的编写者比调用者更加了解线程应不应该被停止,何时停止。 场景2:run()方法中存在sleep()/wait()等会响应中断的方法。...Q:如何清除线程的中断状态? 执行Thread.interrupted();这行代码的线程的中断状态会被清除。 # 哪些情况下线程停止 线程run()方法正常执行完毕。...# 错误的停止线程的方式 被弃用的stop(),suspend()和resume() 使用volatile设置boolean标记位的方式,不可靠 # 如何处理不可中断的阻塞 并不是所有的阻塞都会响应中断

1.9K30

如何停止中断一个运行中的线程

# 面试题: 如何正确地停止/中断一个运行中的线程 哪些情况下线程停止 如何处理不可中断的阻塞 # 核心思想 使用interrupt()来通知,而不是强制。...package com.futao.learn.threads.c_如何停止线程; /** * 正确停止线程---run()方法内没有sleep()或者wait()方法 * * @author...线程代码的编写者比调用者更加了解线程应不应该被停止,何时停止。 场景2:run()方法中存在sleep()/wait()等会响应中断的方法。...Q:如何清除线程的中断状态? 执行Thread.interrupted();这行代码的线程的中断状态会被清除。 # 哪些情况下线程停止 线程run()方法正常执行完毕。...# 错误的停止线程的方式 被弃用的stop(),suspend()和resume() 使用volatile设置boolean标记位的方式,不可靠 # 如何处理不可中断的阻塞 并不是所有的阻塞都会响应中断

3.1K10
领券