1、run方法正常结束
public class StopThreadDemo { public static void main(String[] args) { PrintThread pt = new PrintThread(); pt.start(); } } class PrintThread extends Thread { public void run() { for (int i = 0; i < 10; i++) { System.out.println("print : " + i); } } }
2、可以在run方法中设置标记让线程正常结束
public class StopThreadDemo { public static void main(String[] args) { PrintThread pt = new PrintThread(); pt.start(); } } class PrintThread extends Thread { int i = 0; boolean isStop = false; public void run() { while(!isStop) { if ((i++) == 10) { isStop = true; } System.out.println("print : " + i); } } }
3、当线程处于冻结状态,没有指定的方式恢复到运行状态时,这时需要对冻结状态进行清除 强制让线程恢复到运行状态中来,这样就可以操作标记,让线程结束 Thread类中提供了该方法 interrupt()方法
public class StopThreadDemo { public static void main(String[] args) { StopThread st = new StopThread(); Thread t1 = new Thread(st); Thread t2 = new Thread(st); t1.start(); t2.start(); int num = 0; while (true) { if (num++ == 60) { // st.changeFlag(); /* * interrupt方法只作用于那些因为执行了sleep、wait、join方法而休眠的线程,使他们不再休眠 */ t1.interrupt(); t2.interrupt(); break; } System.out .println(Thread.currentThread().getName() + "....." + num); } System.out.println("over"); } } class StopThread implements Runnable { private boolean flag = true; @Override public synchronized void run() { while (flag) { try { wait(); } catch (InterruptedException e) { // 可以在异常代码块中处理让线程正常退出或强制线程退出(return) System.out.println(Thread.currentThread().getName() + ".....Exception....."); flag = false; } System.out.println(Thread.currentThread().getName() + ".....run....."); } } public void changeFlag() { flag = false; } }
相关推荐
Java提供了一种不推荐的方式来停止线程,即使用`Thread.stop()`,但这个方法不安全,因为它可能导致数据不一致和资源泄露。更好的做法是使用标志变量,如`volatile boolean stopRequested`,当主线程或其他线程想要...
阻塞状态是指线程因为某些原因放弃CPU的使用权,暂时停止运行,直到重新进入就绪状态。死亡状态则是线程的生命周期结束,可能是因为线程任务执行完毕或因异常情况退出。 在Java中,创建线程有几种常见的方式。第一...
9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...
Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...
1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. InterruptedException:线程被中断时抛出的异常,通常需要捕获并处理。 九、线程死锁 1. 死锁的概念...
4. **停止线程**:`public void stop()`方法中,将`flag`设置回`false`,从而使得`while`循环退出,线程停止运行。 ### 最佳实践与注意事项 虽然使用标志变量是一种优雅的线程停止策略,但在实际应用中还需注意...
在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....
在Java编程中,多线程处理是提升程序性能和效率的重要手段,特别是在处理大量数据库数据时。本主题将深入探讨如何使用Java的并发包(java.util.concurrent)来实现多线程对数据库数据的批量处理,包括增、删、改等...
Thread类提供了interrupt()方法用于中断线程,但是需要注意的是,中断并不是立即停止线程,而是设置一个中断标志,线程需要在适当的地方检查这个标志并处理中断。 通过对以上知识点的深入理解和实践,开发者可以...
单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...
Thread类提供了interrupt()方法用于中断线程,但需要注意的是,这并不意味着线程会立即停止,而是在线程检查到中断标志后自行决定是否停止。守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护...
Java的线程和Java Applet是Java编程中的两个重要概念,它们分别涉及并发执行和Web应用程序的执行环境。 **线程**在Java中是程序执行的最小单元,它允许程序在同一时间执行多个任务。Java内置对多线程的支持,使得...
1. **线程基础**:书中首先会介绍Java多线程的基础知识,包括线程的创建方式(如通过`Thread`类或实现`Runnable`接口)、线程的生命周期(新建、就绪、运行、阻塞和死亡),以及如何启动和停止线程。 2. **线程同步...
7. **线程通信**:在某些情况下,可能需要线程之间进行通信,例如当某个线程提前完成时,通知其他线程停止工作。可以使用`wait()`、`notify()`或`join()`方法实现线程间的同步。 8. **网络请求库**:通常会用到HTTP...
`suspend()`方法用于暂时停止一个线程的执行,而`resume()`方法则用于恢复之前被`suspend()`方法挂起的线程。然而,这两个方法存在一些问题,导致它们在Java中被视为不安全且过时的。 #### 问题一:死锁风险 使用`...
Java多线程的学习不仅仅停留在创建和启动线程上,还包括深入理解线程的状态、优先级,以及如何安全地停止线程等问题。例如,线程状态包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED。合理地管理...
Java提供了Thread.interrupt()和isInterrupted()方法来支持线程的中断,这是一种优雅的停止线程执行的方式。 7. **Future与Callable接口**:Future接口代表异步计算的结果,而Callable接口允许线程返回一个结果,与...
Java不推荐直接停止线程(如Thread.stop(),已废弃),因为这可能导致资源泄露。推荐使用interrupt()方法来中断线程,并在run()方法中检查isInterrupted()或interrupted()状态,以优雅地退出线程。 六、线程池 Java...
Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个小部分,然后创建多个线程同时下载这些部分,以提高下载速度。这种技术在处理大文件或者网络带宽有限的情况下尤其有用,...
6. 线程中断:通过interrupt()方法可以中断线程,但需要注意中断并不立即停止线程,而是设置一个中断标志,线程需要检查这个标志并适当地响应。 7. 线程局部变量(ThreadLocal):每个线程都有自己的副本,确保了...