我们一直以来都有一个错误的理解,认为interrupt会使线程停止运行,但事实上并非如此,调用一个线程的interrupt方法会把线程的状态改为中断态,但是interrupt方法只作用于那些因为执行了sleep、wait、join方法而休眠的线程,使他们不再休眠,同时会抛出InterruptedException异常。比如一个线程A正在sleep中,这时候另外一个程序里去调用A的interrupt方法,这时就会迫使A停止休眠而抛出InterruptedException异常;而如果线程A没有处于上面提到的三种休眠状态时被interrupt,这样就只是把线程A的状态改为interruptted,但是不会影响线程A的继续执行。
如何停止一个线程呢?用stop方法吗?肯定不行,这个方法由于不安全已经过时,不推荐使用,下面的例子提供了一个常用的停止线程的方法,例子中在线程中引入一个属性来控制,当需要停止线程时,只需要调用shutDownThread()方法即可,因为在线程的run()方法中会循环检测这个属性的值,为true正常运行,为false时不会进入循环,线程就可以结束.
public class TestStopThread
{
public static void main(String args[]) {
Runner r = new Runner() ;
Thread t = new Thread(r) ;
t.start() ;
for(int i=0 ;i<100 ;i++ ) {
if(i%10 == 0 )
System.out.println("Thread: i=" i) ;
}
System.out.println("Thread over ...") ;
r.shutDownThread() ;
}
}
class Runner implements Runnable
{
private boolean flag = true ;
public void run() {
int i = 0 ;
while(flag) {
System.out.println(i " ") ;
}
}
public synchronized void shutDownThread() {
flag = false ;
}
public synchronized boolean isShutDown() {
return flag;
}
}
分享到:
相关推荐
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
JAVA中终止线程的方法介绍 JAVA 中终止线程的方法是一种重要的多线程编程技术,在Java中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy()and resume()。通过...
在Java早期版本中,提供了`Thread.stop()`方法来直接终止线程,但这种方法存在严重的安全问题。例如,它可能会导致对象处于不稳定的状态,或者在对象的某些关键操作(如资源释放)完成之前就强行终止线程,从而引发...
线程有五种基本状态:新建、就绪、运行、阻塞和终止。了解这些状态有助于理解线程的生命周期。 3. **线程优先级** Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认是`NORM_PRIORITY`(5)。...
2. **实现 `java.lang.Runnable` 接口**:通过实现 `run()` 方法定义线程的行为,并使用 `Thread` 类的构造函数创建线程。 #### 三、Java线程:创建与启动 ##### 定义线程 1. **扩展 `java.lang.Thread` 类**:...
Java通过Thread类来表示线程,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和堆。线程的创建可以通过继承Thread类或实现Runnable接口,然后通过start()方法启动。线程的生命周期包括新建、就绪、运行、阻塞...
"Java中终止线程的方法详解" Java中终止线程的方法详解是Java编程中一个非常重要的知识点。线程的终止是指在Java程序中停止线程的运行,以释放系统资源和避免资源浪费。在Java中,终止线程的方法主要有三种:使用...
5. **Dead(死亡)**:当线程完成其`run()`方法的执行或由于某种异常终止时,它将进入Dead状态。此时,线程无法再次启动。 #### Thread类与线程控制方法 在Java中,线程通过`Thread`类来表示和管理。`Thread`类...
Java中的线程有五种状态:新建(New)、就绪(Runnable)、运行(Running)、等待/阻塞(Blocked)、终止(Terminated)。了解这些状态以及它们之间的转换对于理解多线程的执行流程非常重要。 三、线程同步 1. ...
在Java中,每个程序都有一个主线程,通常由main()方法启动,其他的线程则需要通过调用start()方法来启动。 Java提供了两种主要的创建线程的方式: 1. **创建Thread子类**:首先创建Thread类的子类,并重写run()...
在Java中,直接调用线程的`stop()`方法来终止线程已被废弃,因为这可能导致资源泄露、数据不一致等问题。取而代之的是,开发者通常采用以下几种策略: 1. **使用标志变量(Flag)** 2. **中断线程(Interrupt)** 3...
守护线程在所有非守护线程结束时自动终止,通常用于后台服务,如垃圾收集器。 通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx”可能包含具体的示例...
当Java程序启动时,JVM会创建主线程并在该线程中调用`main()`方法。除了主线程外,JVM还会创建其他线程用于垃圾回收、对象销毁等内部管理任务。 ##### 2. 线程的特点 - **共享资源**:线程之间共享同一个进程的...
- 在多线程环境中,每个线程都应该有适当的异常处理机制,防止线程因未捕获的异常而突然终止,导致整个程序崩溃。 6. **性能优化** - 并发数量的调整:线程过多可能会增加系统开销,而过少则可能无法充分利用多核...
- **线程间通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的协作,需要在同步块或方法中使用。 3. **线程池** - **Executor框架**:`ExecutorService`、`ThreadPoolExecutor`和`Executors`工厂类...
现在推荐的做法是在`run()`方法内通过设置一个标志位来控制线程的运行状态,从而达到优雅地终止线程的目的。 ```java if (thread1.isAlive()) { thread1.stop(); // 终止thread1 System.out.println("thread1已经...