Thread.stop
, Thread.suspend
, Thread.resume
和Runtime.runFinalizersOnExit
这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!
现在,如果你要安全有效地终止一个线程,应该采用以下这些方法:
1,线程正常执行完毕,正常结束。
也就是让run方法执行完毕,该线程就会正常结束。
2,监视某些条件,结束线程的不间断运行。
然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。
通常,它们执行在一个while(true)的死循环中。
如:
@Override
public
void
run() {
while
(
true
){
someWork();
if
(
finished
){
break
;
}
try
{
Thread.sleep
(10000);
}
catch
(InterruptedException e) {
/*
TODO
自动生成
catch
块
*
*/
e.printStackTrace();
}
}
}
我们可以在while死循环内,每次循环时,察看外部条件,看看是否需要关闭当前线程。如果是,就break,跳出死循环,或者是抛出异常,跳出死循环,结束线程。
有些执行伺服任务的线程,在while(true)这样的死循环内部,是一个阻塞中的方法。此时,就不能采用第二种方法了。因为,当该方法没有返回时,该线程一直处于阻塞当中,根本无法执行其他语句。
如:
@Override
public
void
run() {
while
(
true
){
try
{
// getSendMessages
是
BlockingQueue
类。它的
take
方法将会阻塞!
responseMessage =
this
.getSendMessages().take();
}
catch
(InterruptedException e1) {
throw
new
RuntimeException();
//
或者
break;
}
someWork();
}
一个外部的Thread 对象 指向这个线程。 需要结束这个线程时,只需要调用thread对象的interrupt
() 方法,就会在
responseMessage =
this
.getSendMessages().take();
这条语句中产生一个InterruptedException
异常,从而结束该线程的阻塞状态,通过抛出异常,或者
break
跳出死循环,结束这个线程。
分享到:
相关推荐
本示例将详细探讨Java中断线程的正确方法,以确保线程安全且高效地退出。 首先,我们需要了解Java中的线程中断机制。线程中断是通过调用`Thread.interrupt()`方法来实现的,它会设置线程的中断标志。当线程正在运行...
- interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...
9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...
1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. InterruptedException:线程被中断时抛出的异常,通常需要捕获并处理。 九、线程死锁 1. 死锁的概念...
Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...
// 超时后中断线程 } ``` 基本数据类型在超时控制中主要体现在计算或比较操作上,例如,我们可以用long类型的变量记录开始时间,然后在超时检查时与当前时间进行比较。反射则允许我们在运行时动态获取类、方法和...
挂起线程通常通过调用`sleep()`或`wait()`方法实现,恢复线程可能通过`notify()`或`notifyAll()`唤醒,终止线程则可以通过`interrupt()`方法发送中断请求,但线程本身需要检查`isInterrupted()`或`...
本文将深入探讨Java中的多线程操作方法,包括线程控制的基本方法、中断和睡眠以及相关示例。 首先,了解线程的基本状态至关重要。线程在运行过程中可能处于新建、可运行、运行、阻塞或死亡等状态。`isAlive()`方法...
Thread类提供了interrupt()方法用于中断线程,但是需要注意的是,中断并不是立即停止线程,而是设置一个中断标志,线程需要在适当的地方检查这个标志并处理中断。 通过对以上知识点的深入理解和实践,开发者可以...
创建后,调用start()方法启动线程,而非run()方法,因为start()会触发Java虚拟机(JVM)执行线程的run()方法。 其次,线程同步是多线程编程中的关键部分,以防止数据竞争和不一致。Java提供了多种同步机制,如...
Java通过Thread类来表示线程,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和堆。线程的创建可以通过继承Thread类或实现Runnable接口,然后通过start()方法启动。线程的生命周期包括新建、就绪、运行、阻塞...
线程中断 静态方法(有关同步的细节) 总结 第五章 Java线程编程的例子 数据结构和容器 简单的同步例子 一个网络服务器类 AsyncInputStream类 使用TCPServer和AsynclnputStream 总结 第六章 Java线程调度 线程...
Java中控制线程的方法有多种,如start()启动线程,run()执行线程,sleep()让线程休眠,join()等待其他线程完成,yield()让当前线程暂停,让其他线程有机会执行,以及interrupt()和isInterrupted()用于中断和检查线程...
Java提供了一个更安全的中断线程的机制,即`Thread.interrupt()`。当调用`interrupt()`时,目标线程的中断状态会被设置,线程在检查到中断状态后可以决定如何响应。例如,`Thread.sleep()`、`SocketInputStream....
- `interrupt()`方法用于中断线程,但这并不意味着线程会立即停止,而是设置中断标志,线程需在适当位置检查`isInterrupted()`或`interrupted()`方法来响应中断。 - 守护线程(Daemon Thread)是一种后台线程,当...
Thread类提供了interrupt()方法用于中断线程,但需要注意的是,这并不意味着线程会立即停止,而是在线程检查到中断标志后自行决定是否停止。守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
以下是关于Java中断线程的一些关键知识点: 1. **线程状态**:在Java中,线程有多种状态,包括新建、可运行、运行、阻塞、等待、超时等待和终止。中断线程主要是针对那些处于运行、阻塞或等待状态的线程。 2. **...
4. **线程操作**:`Thread`类提供了启动、暂停、恢复、设置优先级、中断和销毁线程的方法。 5. **线程状态**:Java线程有五种基本状态:新建、可运行、运行、阻塞和死亡。线程的状态转换反映了其生命周期的不同阶段...
Java 多线程该存储库包含 ...Java 多线程低级生产者-消费者10- Java 多线程可重入锁11- Java 多线程死锁12- Java 多线程信号量13- Java 多线程Callable 和 Future14- Java 多线程中断线程贡献者Z. Berkay Celik@IOAyman