`
envy2002
  • 浏览: 151710 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Thread.interrupt

 
阅读更多

 

Thread.interrupt(),就是置状态。

public void run() {
		//死循环执行打印"I am running!" 和做消耗时间的浮点计算
		while (true) {
			System.out.println("I am running!");
			
			for (int i = 0; i < 900000; i++) {
				d =  d + (Math.PI + Math.E) / d;
	
			}
			
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				System.out.println("****************************  "+Thread.currentThread().isInterrupted());
			} 
			//给线程调度器可以切换到其它进程的信号
			Thread.yield();
		}
	}

  主线程要

    

//将任务交给一个线程执行
		Thread t = new Thread(new ATask());
		t.start();
		
		//运行一断时间中断线程
		while(true)
		{
			Thread.sleep(100);
			System.out.println("11111111****************************");
			System.out.println("Interrupted Thread!");
			System.out.println("11111111****************************");
			System.out.println("11111**************************** before is interrupted? "+t.isInterrupted());
			t.interrupt();
			
			System.out.println("11111**************************** after is interrupted? "+t.isInterrupted());
		}

   主线程要interrupt次线程的话,那么次线程有普通代码块,就是除去,wait, sleep,join等方法时的普通代码块。由于主次线程时间片切换的问题,那么t.isInterrupted = false, t.interrupt(),可能是时间片没有切换过去,或者切换过去了,但是次线程是普通代码块,然后又切换到主线程,t.isinterrupted= true. 如果时间片切换到

次线程sleep方法,次线程会跑出一个异常,跑到catch块中 了,所以isInterrupted= false.我自己是这么理解

类似linux系统中的信号量。

分享到:
评论

相关推荐

    Thread.interrupt()方法的使用以及使用它退出线程

    Thread.interrupt()方法的使用以及使用它退出线程

    线程外部挂起恢复控制(不使用Suspend与Resume中止线程)

    自.NET 2.0以来,Thread.Suspend()与Thread.Resume()方法已过时,VS提示可以使用如Monitor等技术,但是对于刚接触...相关技术参考:http://msdn.microsoft.com/zh-cn/library/system.threading.thread.interrupt.aspx

    为什么不鼓励使用 Thread.stop?

    `Thread.interrupt` 方法是一个比较安全的替代方案,它会设置线程的中断状态,并且许多阻塞方法(如 `Thread.sleep`, `Object.wait`)在被中断时会抛出 `InterruptedException`,使得线程可以捕获这个异常并进行必要...

    java线程强制停止的两个Demo

    Java推荐使用更安全的中断机制,即通过`Thread.interrupt()`方法向线程发送中断信号,然后在线程的run方法中定期检查`isInterrupted()`或`interrupted()`状态来优雅地停止线程。这种方式允许线程清理资源并正常退出...

    JavaThread.pdf

    - Thread.getThreadGroup()获取线程所属的线程组,Thread.interrupt()和Thread.currentThread().interrupted()分别用于中断和检查当前线程是否被中断。 10. **线程的等待/通知机制** - 使用wait()、notify()、...

    Java如何中断一个正在运行的线程[整理].pdf

    其次,`Thread.interrupt()`方法的名字可能误导人以为它可以立即中断线程。实际上,`interrupt()`方法并不直接停止线程,而是设置线程的中断状态标志。当线程在某些阻塞操作(如`Thread.sleep()`, `Object.wait()`, ...

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

    线程中断是通过调用`Thread.interrupt()`方法来实现的,它会设置线程的中断标志。当线程正在运行时,这个中断标志通常不会立即导致线程停止,而是作为一种请求,告知线程应该尽快结束。线程需要定期检查中断状态,并...

    javathread.part04.rar

    - `Thread.interrupt()`:标记线程为中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`来响应中断请求。 10. **线程安全的日志和调试**: - 使用适当的日志框架(如Log4j、SLF4J)记录线程信息。 -...

    浅谈Java线程Thread之interrupt中断解析

    Java线程Thread之interrupt中断解析 Java线程Thread之interrupt中断机制是Java多线程编程中的一种重要机制。通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断...

    线程常用方法示例

    `Thread.Interrupt`方法用于中断处于`Sleep`、`WaitOne`或`Join`状态的线程。不同于`Abort`,`Interrupt`不会立即终止线程,而是发出一个信号,使线程有机会响应并清理资源。当线程在`Sleep`或`WaitOne`中被中断时...

    Java处理InterruptedException异常的理论与实践

    这个异常的出现并不是错误,而是线程系统向你发出的一个信号,表明线程的中断状态已被改变,可能是其他线程通过调用`Thread.interrupt()`请求当前线程停止执行。 `InterruptedException`的存在是为了支持可取消的...

    Java线程如何终止.pdf

    public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } // ... } ``` 在这个...

    Java线程中断示例程序的代码清单.pdf

    首先,`TestThread_interrupt.java`是主程序,它创建了一个`ClassRoom`对象,并启动了两个线程。`ClassRoom`类实现了`Runnable`接口,这意味着它包含一个`run()`方法,该方法将在线程中执行。 在`ClassRoom`的`run...

    JavaThread中断机制共11页.pdf.zip

    在Java中,线程中断主要通过`Thread.interrupt()`方法实现,这个方法会设置线程的中断状态标志。下面将详细阐述Java线程中断机制的各个方面。 1. **线程中断状态** Java中的线程中断状态是一种标志,由`Thread....

    ThreadDemo3.rar

    `Thread.interrupt()`用于中断一个线程。如果线程正在阻塞(如在`sleep()`或`wait()`),这个方法将抛出`InterruptedException`,线程可以捕获这个异常来响应中断请求。 7. **join()方法**: `Thread.join()`让...

    线程终止问题

    public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); // 延迟 50 秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public ...

    java中 如何终止一个线程

    Thread.currentThread().interrupt(); // 重新设置中断状态 System.out.println("被中断"); } ``` #### 三、`interrupt()`方法的工作原理 当我们调用`thread.interrupt()`时,Java虚拟机会执行以下步骤: 1. ...

    java多线程1

    - `Thread.interrupt()`方法主要在线程被阻塞时发挥作用,如`Object.wait()`, `Thread.join()`, 或者`Thread.sleep()`。这些方法会抛出`InterruptedException`,使得线程能从阻塞状态中退出。 - 如果线程未被阻塞...

Global site tag (gtag.js) - Google Analytics