对于线程的终止或者中断,由于java中Thread.stop方法已经被弃用,如何终止一个线程,成为了一个挑战,不仅仅要考虑终止的条件也要考虑终止后的收尾工作。
大部分情况下,我们可以通过自己设置的标识例如m_stop布尔变量来,这样写run方法
public run ()
{
while(!m_stop)
{
//add your works here.
}
}
然后可以自己写一个Stop方法在里面将m_stop改变,就可以达到终止线程的目的。
但是如果在你的线程中,就是while循环中出现阻塞(大部分情况是wait,sleep或者IO阻塞等等),线程就停在里面,我们就无法通过判断m_stop的值来终止线程了。
这样我们可以通过另一种方式,调用interrupt()方法,这个方法是比较特别的,
通过测试,interrupt方法实现了这样的功能:
如果线程当前在sleep和wait状态下,会清除interrupt status, 并同时抛出异常.
而在非sleep和wait状态下,就会表明自己为interrupt status.
我们可以通过isInterrupted方法获得interrupt status。
也就是说如果线程处于阻塞状态,而且我们改变m_stop的值已经不起作用的时候,我们可以通过异常来终止线程。也就是在Stop方法里调用interrupt()方法,如果线程当前处于阻塞状态会产生一个异常。
例如:
public void run() {
while ( !m_stop) {
System.out.println( "Thread running..." );
try {
Thread.sleep( 1000 );
} catch ( InterruptedException e ) {
System.out.println( "Thread interrupted..." );
}
}
System.out.println( "Thread exiting under request..." );
}
这样可以通过catch子句跳出run方法,从而终止线程。
总结:
终止线程的方法
1、通过标识设置,跳出while循环
2、通过异常跳出run方法。
分享到:
相关推荐
Java终止线程实例和stop()方法源码阅读 Java 中的线程是程序中的执行单元,Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都拥有状态,表示线程的状态,同一时刻中,JVM 中的某个线程只有一种状态。...
Java提供了三种线程状态:新建(New)、运行(Runnable)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)。阻塞状态通常发生在线程等待I/O操作完成、调用sleep()方法、等待锁...
挂起线程通常通过调用`sleep()`或`wait()`方法实现,恢复线程可能通过`notify()`或`notifyAll()`唤醒,终止线程则可以通过`interrupt()`方法发送中断请求,但线程本身需要检查`isInterrupted()`或`...
线程有五种基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)。线程的生命周期包括创建、启动、运行、等待、唤醒和结束等过程。 三、同步控制 1. synchronized...
NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286
线程有五种基本状态:新建、就绪、运行、阻塞和终止。了解这些状态有助于理解线程的生命周期。 3. **线程优先级** Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认是`NORM_PRIORITY`(5)。...
线程的生命周期包括新建、就绪、运行、阻塞和终止五个状态。 其次,书中会详细介绍线程同步机制。这是避免多线程环境下数据不一致的关键。Java提供了多种同步工具,如synchronized关键字、wait()和notify()方法、...
- **生命周期**:线程有新建、就绪、运行、阻塞和终止五种状态,理解这些状态转换对于管理线程至关重要。 - **同步机制**:包括`synchronized`关键字、`volatile`关键字、`Lock`接口及其子类,用于解决多线程环境...
Java中的线程有五种状态:新建(New)、就绪(Runnable)、运行(Running)、等待/阻塞(Blocked)、终止(Terminated)。了解这些状态以及它们之间的转换对于理解多线程的执行流程非常重要。 三、线程同步 1. ...
线程在其生命周期中会经历不同的状态,包括新建(`NEW`)、就绪(`RUNNABLE`)、阻塞(`BLOCKED`)、等待(`WAITING`)、超时等待(`TIMED_WAITING`)和终止(`TERMINATED`)等状态。 ##### 4. 线程的调度和优先级 Java线程...
在Java编程中,正确且安全地终止线程是非常重要的,因为不当的操作可能会导致资源泄露、数据不一致性甚至系统崩溃等问题。本篇文章将详细探讨如何使用`interrupt()`方法安全地终止一个线程。 #### 一、为什么不能...
- 在多线程环境中,每个线程都应该有适当的异常处理机制,防止线程因未捕获的异常而突然终止,导致整个程序崩溃。 6. **性能优化** - 并发数量的调整:线程过多可能会增加系统开销,而过少则可能无法充分利用多核...
守护线程在所有非守护线程结束时自动终止,通常用于后台服务,如垃圾收集器。 通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx”可能包含具体的示例...
- 检测和恢复死锁:定期检查系统状态,检测到死锁后,可以终止某个线程或者回滚事务来打破死锁状态。 4. 线程池 Java提供了ExecutorService和ThreadPoolExecutor类来管理线程,创建线程池可以有效控制并发线程的...
5. **Dead(死亡)**:当线程完成其`run()`方法的执行或由于某种异常终止时,它将进入Dead状态。此时,线程无法再次启动。 #### Thread类与线程控制方法 在Java中,线程通过`Thread`类来表示和管理。`Thread`类...
异常处理在多线程编程中同样重要,每个线程都有自己的异常处理链,当线程中抛出未捕获的异常时,如果没有合适的处理机制,线程将会终止。Java提供try-catch-finally语句块来捕获和处理异常,保证程序的健壮性。 ...
线程的生命周期包括新建(New)、就绪(Runnable)、运行(Running)、等待/阻塞(Blocked)和终止(Terminated)五个状态。线程在运行过程中可能会因为I/O操作、同步机制或者主动调用`sleep()`、`wait()`等方法进入...
守护线程通常用于后台服务,如垃圾收集器,当所有非守护线程结束时,程序才会终止。线程同步是解决线程间共享数据时可能出现的问题,如死锁、活锁和饥饿,Java提供了`synchronized`关键字、`wait()`、`notify()`和`...