`

如何中断线程

 
阅读更多
package cn.com.york.concurrency.demo;

public class ResearchThreadInterrupt implements Runnable {
	/*
	 * 中断线程的方法: 1.设置共享变量,当变量为false时,退出线程。(这种情况适用于当前线程没有被阻塞,可以访问到共享变量)
	 * 2.利用Thread.interrupt(),跳出线程。(这种情况使用于该线程被阻塞,无法访问到共享变量) 
	 * 下面的例子 讨论第二种情况。
	 */

	boolean stop = false;
	int i=0;
	Object obj = new Object();

	/**
	 * 基本认识:第一个例子:thread.interrupt() 不会停止线程,在Thread.interrupt()被调用后,线程仍然继续运行。
	 */
	
	/*
		public void run() {
			while (!stop) {
				System.out.println("Thread is running...");
				long time = System.currentTimeMillis();
				while ((System.currentTimeMillis() - time < 1000)) {
				}
			}
			System.out.println("Thread exiting under request...");
		}
	*/

	// 第二个例子:用Thread.interrupt()设置中断状态为真,如果此时再调用sleep或者await方法阻塞线程,则抛出异常,中断线程
	public void run() {
		try {
			synchronized(obj){
				
				while (!stop) {
					++i;
					//Thread.currentThread().interrupt();
					System.out.println("Thread running..."+"  中断状态:"+Thread.currentThread().isInterrupted());
					//Thread.sleep(1000);
					if(i>5)
						obj.wait();
					long time = System.currentTimeMillis();
					while ((System.currentTimeMillis() - time < 1000)) {
					}
				}
				
			}
			
		} catch (InterruptedException e) {
			System.out.println("Thread interrupted...");
		}
		System.out.println("Thread exiting under request...");
	}

	public static void main(String args[]) throws Exception {
		ResearchThreadInterrupt rt = new ResearchThreadInterrupt();
		Thread thread = new Thread(rt);
		System.out.println("Starting thread...");
		thread.start();
		Thread.sleep(3000);
		System.out.println("Asking thread to stop...");
		thread.interrupt();
		Thread.sleep(3000);
		System.out.println("Stopping application...");
		// System.exit(0);
	}

}
 

 

分享到:
评论

相关推荐

    linux的中断线程化实现[借鉴].pdf

    在Linux操作系统中,中断线程化是一种将中断处理与用户空间任务解耦合的技术,它允许中断处理程序在后台执行,从而改善系统响应时间和资源管理。2.6.25.8内核版本引入了这一特性,使得中断处理更加灵活且高效。 ...

    Java 实例 - 中断线程源代码+详细指导教程.zip

    在Java编程中,中断线程是一项重要的任务,它允许程序在必要的时候停止或者结束一个正在运行的线程。本教程的压缩包包含了中断线程的源代码实例和详细指导,旨在帮助开发者深入理解和掌握这一核心概念。以下是关于...

    java中断线程的正确姿势完整示例.rar

    在Java编程中,中断线程是一项重要的任务,特别是在多线程环境下,我们可能需要停止某个线程的执行,以优化程序资源的使用或响应特定的系统需求。本示例将详细探讨Java中断线程的正确方法,以确保线程安全且高效地...

    Java基本功之中断线程的理解[参考].pdf

    以下是对Java中断线程的详细解释: 1. **线程终止条件**: - 当`run`方法执行完毕。 - `return`语句执行,提前结束`run`方法。 - 出现未捕获的异常,导致`run`方法终止。 2. **`stop`方法的弃用**: Java早期...

    09.多线程编程基础-停止线程-使用interrupt方法中断线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    C++11 线程的中断,继续以及停止

    C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,

    Java多线程之中断线程(Interrupt)的使用详解

    `Thread.interrupt()`方法是中断线程的主要手段,但它的行为并不像字面意义上那样直接终止线程。相反,它通过设置线程的中断状态来向线程发送一个中断信号,这个信号是一个内部标志,告知线程应该停止其当前的工作。...

    Android中断线程的处理方法

    中断线程的处理是确保应用响应性和用户体验的关键。本篇将详细讲解如何在Android中正确地中断线程,以及处理中断后的工作。 首先,Android中的线程中断主要是通过`Thread.interrupted()`或`Thread.currentThread()....

    Java中断线程的方法

    在Java中,中断线程主要是通过调用`Thread`对象的`interrupt()`方法来实现的。这个方法并不会立即停止目标线程,而是设置一个中断标志,表明线程已被请求中断。如果线程处于阻塞状态(例如在`sleep()`, `wait()`, ...

    中断线程处理程序-项目开发

    "中断线程处理程序-项目开发"是一个专注于解决线程中断问题的方案,它提供了不同于传统方法(如使用`yield()`或`delay(ms)`)的线程切换机制,并且不依赖预分配的堆栈。 传统的多线程编程中,`yield()`函数用于让...

    java多线程Demo

    - interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...

    java通过线程控制程序执行超时(新)

    // 超时后中断线程 } ``` 基本数据类型在超时控制中主要体现在计算或比较操作上,例如,我们可以用long类型的变量记录开始时间,然后在超时检查时与当前时间进行比较。反射则允许我们在运行时动态获取类、方法和...

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    Java中,`join`方法有类似功能,而`interrupt`方法可以用来中断线程,通常配合`isInterrupted`或`interrupted`检查中断状态。 在实际应用中,线程调度还需要考虑线程同步和互斥问题,以防止数据竞争和死锁。C语言中...

    多线程面试题

    9. **中断线程**:Thread类的interrupt()方法可以请求线程中断,但并不会立即停止线程,而是让线程在检查到中断标志后自行决定如何退出。 10. **守护线程(Daemon)**:守护线程是一种特殊的线程,当所有非守护线程...

    线程的几种控制方式以及线程间的几种通信方式

    6. **线程中断**:Java中`Thread.interrupt()`方法用于中断线程,Python中可以检查`thread.is_alive()`并抛出异常来实现。 7. **线程join()**:在Java中,`thread.join()`方法使得当前线程等待指定线程结束再继续...

    创建线程类轻松实现线程管理

    - **中断线程**:通过调用`interrupt()`方法可以请求线程停止执行,但实际停止需要线程内部配合检查`isInterrupted()`或捕获`InterruptedException`。 - **死锁**:当两个或更多线程相互等待对方释放资源而造成的一...

    JAVA 线程中启动线程

    - **interrupt()**:中断线程,标记线程的中断状态,对于阻塞操作(如sleep、wait)会抛出`InterruptedException`。 4. **线程同步** - **synchronized**:关键字用于保证同一时间只有一个线程可以访问特定的代码...

    java 多线程并发实例

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

Global site tag (gtag.js) - Google Analytics