`
在水伊方
  • 浏览: 110997 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Java停止线程

 
阅读更多

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多线程编程线程的协同、停止、暂停、继续等操作实现

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

    Java多线程知识点总结

    阻塞状态是指线程因为某些原因放弃CPU的使用权,暂时停止运行,直到重新进入就绪状态。死亡状态则是线程的生命周期结束,可能是因为线程任务执行完毕或因异常情况退出。 在Java中,创建线程有几种常见的方式。第一...

    java多线程的讲解和实战

    9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...

    java 多线程并发实例

    Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...

    Java多线程编程核心技术_完整版_java_

    1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. InterruptedException:线程被中断时抛出的异常,通常需要捕获并处理。 九、线程死锁 1. 死锁的概念...

    JAVA线程停止的方法

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

    java多线程查询数据库

    在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....

    java多线程处理数据库数据

    在Java编程中,多线程处理是提升程序性能和效率的重要手段,特别是在处理大量数据库数据时。本主题将深入探讨如何使用Java的并发包(java.util.concurrent)来实现多线程对数据库数据的批量处理,包括增、删、改等...

    Java多线程练习题

    Thread类提供了interrupt()方法用于中断线程,但是需要注意的是,中断并不是立即停止线程,而是设置一个中断标志,线程需要在适当的地方检查这个标志并处理中断。 通过对以上知识点的深入理解和实践,开发者可以...

    java多线程设计模式详解(PDF及源码)

    单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...

    Java多线程详解及示例

    Thread类提供了interrupt()方法用于中断线程,但需要注意的是,这并不意味着线程会立即停止,而是在线程检查到中断标志后自行决定是否停止。守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    Java的线程和Java Applet是Java编程中的两个重要概念,它们分别涉及并发执行和Web应用程序的执行环境。 **线程**在Java中是程序执行的最小单元,它允许程序在同一时间执行多个任务。Java内置对多线程的支持,使得...

    java多线程进阶

    1. **线程基础**:书中首先会介绍Java多线程的基础知识,包括线程的创建方式(如通过`Thread`类或实现`Runnable`接口)、线程的生命周期(新建、就绪、运行、阻塞和死亡),以及如何启动和停止线程。 2. **线程同步...

    Java多线程下载

    7. **线程通信**:在某些情况下,可能需要线程之间进行通信,例如当某个线程提前完成时,通知其他线程停止工作。可以使用`wait()`、`notify()`或`join()`方法实现线程间的同步。 8. **网络请求库**:通常会用到HTTP...

    Java 多线程介绍

    `suspend()`方法用于暂时停止一个线程的执行,而`resume()`方法则用于恢复之前被`suspend()`方法挂起的线程。然而,这两个方法存在一些问题,导致它们在Java中被视为不安全且过时的。 #### 问题一:死锁风险 使用`...

    java多线程学习

    Java多线程的学习不仅仅停留在创建和启动线程上,还包括深入理解线程的状态、优先级,以及如何安全地停止线程等问题。例如,线程状态包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED。合理地管理...

    JAVA多线程教材

    Java提供了Thread.interrupt()和isInterrupted()方法来支持线程的中断,这是一种优雅的停止线程执行的方式。 7. **Future与Callable接口**:Future接口代表异步计算的结果,而Callable接口允许线程返回一个结果,与...

    Java多线程详解

    Java不推荐直接停止线程(如Thread.stop(),已废弃),因为这可能导致资源泄露。推荐使用interrupt()方法来中断线程,并在run()方法中检查isInterrupted()或interrupted()状态,以优雅地退出线程。 六、线程池 Java...

    java多线程下载器

    Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个小部分,然后创建多个线程同时下载这些部分,以提高下载速度。这种技术在处理大文件或者网络带宽有限的情况下尤其有用,...

    【JAVA多线程】多线程编程核心技术学习资料

    6. 线程中断:通过interrupt()方法可以中断线程,但需要注意中断并不立即停止线程,而是设置一个中断标志,线程需要检查这个标志并适当地响应。 7. 线程局部变量(ThreadLocal):每个线程都有自己的副本,确保了...

Global site tag (gtag.js) - Google Analytics