`

如何停止线程

 
阅读更多

在java中有以下3种方法可以终止正在运行的线程:

1.使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

2.使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。

3.使用interrupt方法中断线程。

 

调用interrupt方法是在当前线程中打了一个停止标志,并不是真的停止线程。

中断是一种协作机制。一个线程不能强制其它线程停止正在执行的操作而去执行其它的操作。

停止一个线程最佳实践是 中断 + 条件变量。

 

判断线程是否停止状态

this.interrupted(): 测试当前线程是否已经中断;线程的中断状态由该方法清除。如果连续两次调用该方法,则第二次调用返回false。

this.isInterrupted(): 测试线程是否已经中断;

 

interrupt在sleep状态下停止某一线程,会进入catch语句,抛出java.lang.InterruptedException异常,并且清除停止状态值,使之变为false。

调用stop()方法时会抛出java.lang.ThreadDeath异常,但是通常情况下,此异常不需要显示地捕捉。

stop()方法以及作废,因为如果强制让线程停止有可能使一些清理性的工作得不到完成。另外一个情况就是对锁定的对象进行了解锁,导致数据得不到同步的处理,出现数据不一致的问题。

 

停止线程的方式

异常法、在沉睡中停止、暴力停止、return停止

 

 

引用地址:

http://www.cnblogs.com/greta/p/5624839.html

分享到:
评论

相关推荐

    C++实现的可以安全的暂停、继续、停止线程的线程类和Sample

    在使用线程时,最麻烦的就是线程的同步控制,如... 本人经过试验和总结,整理出可以安全的进行暂停、继续、停止线程执行的一个线程类,能非常方便的对线程进行控制。 附件里是源码和Sample程序,并有详细的使用说明。

    C++ 实现 暂停、继续、停止线程的线程类 和 Demo

    简单的说就是用开辟一个线程用来监测两个事件(while 循环,循环内包含了你想要处理的动作,比如此例中的更新进度条),通过控制两个事件的状态来控制循环的启动、暂停和继续。 有个小Bug: BOOL CFThread::...

    C#停止线程的方法

    本文将详细讨论如何在C#中正确地停止线程。 首先,C#并没有提供直接的“Stop”方法来结束一个线程,因为这样做可能会导致数据不一致性和资源泄露。因此,推荐使用协作式的方式来停止线程,即让线程自己检查是否应该...

    09.多线程编程基础-停止线程-使用interrupt方法中断线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    停止线程和取消线程任务的案例代码

    这个资源文件中,包含了停止线程和取消线程任务的案例代码,介绍了四五种停止线程、取消线程任务的方式,有Thread.stop()、Thread.interrupt()、future,cancel(true)等等,也可以查看文章...获取。

    JAVA线程停止的方法

    4. **停止线程**:`public void stop()`方法中,将`flag`设置回`false`,从而使得`while`循环退出,线程停止运行。 ### 最佳实践与注意事项 虽然使用标志变量是一种优雅的线程停止策略,但在实际应用中还需注意...

    java安全停止线程的方法详解

    Java 安全停止线程的方法详解 Java 安全停止线程是 Java 编程中的一项重要技术,旨在确保线程的安全停止,以免出现程序崩溃或数据不一致的情况。下面将详细介绍 Java 安全停止线程的方法。 为什么不推荐使用 ...

    一个简单的多线程例子,启动线程与终止线程。

    本示例提供了一个简单的多线程应用,旨在帮助理解如何创建、启动和停止线程。以下将详细讲解相关知识点。 首先,我们讨论如何**创建多线程**。在Java中,有两种主要的方法来创建线程:通过继承Thread类或实现...

    关于线程的动态停止,一个很经典的多线程麦票程序

    通常推荐使用共享标志或中断来停止线程。 - 共享标志:线程在循环中检查一个共享变量(如`isRunning`),当外部设置这个标志为false时,线程会在下次迭代时自行停止。 - `Thread.interrupt()`:可以向线程发送一个...

    易语言正确退出线程

    在编程领域,线程是程序执行的基本单元,特别是在多任务操作系统中。易语言是一种中文编程环境,它提供了方便的线程操作接口。本篇将详细探讨如何在易语言中实现“正确退出线程”这一重要知识点。 首先,理解线程的...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    Java提供了一种不推荐的方式来停止线程,即使用`Thread.stop()`,但这个方法不安全,因为它可能导致数据不一致和资源泄露。更好的做法是使用标志变量,如`volatile boolean stopRequested`,当主线程或其他线程想要...

    Java使用ExecutorService来停止线程服务

    Java 使用 ExecutorService 来停止线程服务 Java 中的 ExecutorService 是一个非常强大的线程池管理工具,它提供了多种方式来停止线程服务。今天,我们将详细介绍如何使用 ExecutorService 来停止线程服务。 首先...

    动态控制线程执行和停止问题

    访问路径为:http://localhost:8080/web001/test.do?flag=xxyyzz&switch=off 其中switch开关参数取值有两种:on和off,on表示执行线程对应的任务,off表示中断线程正在执行的任务。

    Qt之线程的开始暂停恢复停止 源码

    最后,停止线程是一个需要注意的地方,因为直接销毁`QThread`对象并不能确保线程中的工作被安全停止。正确的做法是使用信号和槽机制通知线程退出`run()`函数,然后等待线程结束,最后再删除`QThread`对象: ```cpp ...

    java多线程之停止线程的方法实例代码详解

    Java多线程之停止线程的方法实例代码详解 Java多线程是一种常用的编程模型,它可以大大提高程序的执行效率和响应速度。然而,在使用多线程时,需要掌握停止线程的方法,以避免资源浪费和程序崩溃。本文将详细介绍...

    C#092线程的启动和停止 源代码

    但是,这并不能立即停止线程,只能让线程在等待I/O、锁或其他阻塞操作时抛出一个ThreadInterruptedException异常,从而有机会退出。 3. **Abort方法**:Thread类的Abort方法会立即终止线程,但这是非常危险的,因为...

    Java中停止线程执行的方法

    本文将深入探讨如何在Java中正确地暂停或停止线程,以及为何不推荐使用wait()和notify()来实现这一目标。 首先,我们要了解Java中线程的生命周期,包括新建(New)、可运行(Runnable)、运行(Running)、阻塞...

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    使用pthread库,你可以创建、启动、挂起、恢复和停止线程。例如,创建一个新线程的代码如下: ```c #include void* thread_function(void* arg) { // 线程执行的代码 } int main() { pthread_t thread_id; ...

    zhaoguolei1024#AutoJsExample#多线程.js1

    # 多线程.js//线程暂停//线程停止//定义一个线程//线程开始执行//等待线程执行完闭。

    c#,winfrom线程暂停,继续,停止dome

    // 如果需要立即停止线程,可能需要更复杂的同步机制,如使用ManualResetEvent或CancellationTokenSource } ``` 以上代码只是一个基础示例,实际应用中可能需要考虑更多的线程安全问题,比如使用锁来保护共享资源...

Global site tag (gtag.js) - Google Analytics