`

java_thread interrupt 理解

    博客分类:
  • java
阅读更多

 

package com.java.util.concurrent;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Test1 {
	
	public static void main(String[] args) throws Exception {
		
		ExecutorService exeService = Executors.newFixedThreadPool(1);
		
		Future<Thread> future = exeService.submit(new CallableC<CallObj>(new CallObj()));
		// exeService.submit(new CallableC<CallObj>(new CallObj()));  blocking quene
		Thread s = future.get();// get() is blocking 
		System.out.println(s);
		System.out.println(s.isInterrupted());
		
	}
	
	static class CallObj{
		@Override
		public String toString() {
			
			return System.currentTimeMillis()+"";
		}
	}
	

	static class CallableC<V> implements Callable{
		

		private V obj ;
		public CallableC(V o) {
			obj = o;
		}
		
		
		public Thread call() throws Exception {
			System.out.println("start.....");
			int i = 0;
			try {
				while (true) {
					call(obj);
					Thread.sleep(1000);// in sleep(),weather interrupted;     i=7,currentThread is interrupted 
					i++;
					if(i>5)// 7 times ; i=6 currentThread.interrupt()
						Thread.currentThread().interrupt();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				System.out.println("done.....");
			}

			return Thread.currentThread();
		}
		
		
		public String call(V arg){
			System.out.println(Thread.currentThread().getName());
			return null;
		}
		
	}
	
}

中断特点:

   1. 只能中断线程阻塞 时

   2. 中断不影响thread代码逻辑,只是一个标志位的改变和中断异常的表示

 

 

    Thread.currentThread().interrupt(); 会把Thread,中断标志位 标志为 true,

    Thread.sleep() ; 方法内部Thread会判断当前线程的中断标志位,为true,则抛出中断异常

    Thread被中断(这里(上面的代码)是指抛出中断异常了),thread仍继续执行,如果没有使用中断标志位进行其它的逻辑处理,中断就没有意义

  

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java_Thread.rar_java 多线程_java多线程

    本资料"java_Thread.rar"提供了一些Java多线程的实践案例,对于深入理解和应用Java多线程技术具有很高的参考价值。 首先,我们要理解线程的基本概念。线程是程序执行的最小单元,每个线程都拥有自己独立的程序...

    06_Thread_java_boardkbl_

    在"06_Thread_java_boardkbl_"的压缩文件中,我们可以期待找到关于以上知识点的代码示例和详细注释,帮助我们更好地理解和应用Java中的线程机制。通过实践这些例子,开发者可以提高自己在并发编程领域的技能,编写出...

    Java_Thread应该注意的问题

    - 线程可以通过`interrupt()`方法请求中断,而线程内的代码应检查并适当地响应`InterruptedException`。 9. **线程池**: - 使用`ExecutorService`和`ThreadPoolExecutor`管理线程池可以更高效地控制线程的生命...

    java_Java_学习笔记.zip

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和安全性著称。这份"java_Java_学习笔记.zip"包含了丰富的Java基础知识,对于初学者来说是极好的...建议下载阅读,通过实践加深理解,逐步掌握Java编程。

    MultiThread_java.rar_java thread_java并行_multithread_任务

    在Java编程语言中,多线程是实现并发执行任务的关键技术。它允许程序同时执行多个独立的任务,从而提高..."MultiThread_java"这个资源可能涵盖了这些概念,通过学习和实践,我们可以更好地理解和掌握Java的多线程编程。

    JAVA Test_Thread

    "JAVA Test_Thread"很可能是一个示例项目或测试用例,专门用于演示和理解Java中的多线程操作。在这个项目中,我们可能会看到如何创建、管理以及同步线程。 在Java中,有多种方式来创建线程: 1. **实现Runnable...

    RR.zip_java 进程调度_round robin java_时间片 java_时间片轮转_轮转调度

    这通常通过修改线程的执行状态或调用`Thread.interrupt()`实现。 5. **循环调度**:在主程序中,设置一个主循环来不断执行调度过程,直到所有进程都完成执行。 6. **输出和可视化**:为了更好地理解算法的运行,...

    java_concurrency_in_practice_source源代码

    9. **中断和异常处理**:Java允许线程中断,通过`Thread.interrupt()`方法实现。源码将展示如何响应中断请求,以及正确处理线程中断时抛出的`InterruptedException`。 10. **并发工具类**:`CountDownLatch`、`...

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

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

    javathread类源码-java_thread_source_code:java多线程设计模式手打的

    在这个`java_thread_source_code`压缩包中,我们很可能会找到Java `Thread`类的源代码实现,这将有助于深入理解Java线程的工作原理。 在Java中,`Thread`类是`java.lang`包的一部分,它是所有用户线程的超类。我们...

    Java_Thread_Programming_Information.rar_Java编程_Java_

    Java线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提高了应用程序的效率和...通过深入学习这些概念和实践,开发者能够更好地理解和处理多线程环境下的复杂问题,提升Java程序的并发性能和稳定性。

    JAVA-JavaThreadProgramming-Sams.zip_JAVA 设计_java 多线程_java 线程_多线程

    Java通过`java.lang.Thread`类和`java.util.concurrent`包提供了丰富的线程支持。创建线程有两种主要方式:继承Thread类和实现Runnable接口。继承Thread类直接复写run()方法,而实现Runnable接口则需要将run()方法...

    java_shits.rar_class

    Java中的线程处理是通过`java.lang.Thread`类及其相关接口来实现的。本篇文章将深入探讨Java中的线程概念、创建线程的方式以及线程的管理与同步。 一、线程基础 线程允许程序并发执行,提高了资源利用率和响应速度...

    java_经典Sleep与异步同步并发编程

    根据给定的文件信息,以下是对各个知识点的详细解析: ### 1. Sleep状态的打断唤醒 #### 知识点描述 在Java中,`Thread.sleep(long millis)` 方法可以使当前正在...这些知识点对于理解和掌握Java并发编程至关重要。

    java_多线程开发

    Java多线程开发是编程领域中的重要组成部分,尤其在当今多核处理器的普遍使用下,理解和掌握多线程编程显得尤为重要。多线程允许程序同时执行多个任务,从而充分利用系统资源,提高程序的效率和响应速度。 在Java中...

    java-multi-thread-mechanism.rar_java thread ppt

    以上是Java多线程机制的主要知识点,理解并熟练掌握这些概念对于编写高效、可靠的并发程序至关重要。在实际开发中,合理地利用线程能够优化程序性能,提升用户体验。通过深入学习和实践,我们可以更好地驾驭Java的多...

    Java interrupt()方法使用注意_动力节点Java学院整理

    然而,理解`interrupt()`方法的正确使用方式至关重要,因为直接调用`interrupt()`并不总是能立即停止线程。本文将深入探讨`interrupt()`方法的工作原理,以及如何有效地利用它来中断线程。 首先,`Thread.stop`方法...

    java-thread-vedio.rar_java vedio

    这个"java-thread-vedio.rar_java vedio"压缩包文件显然包含了关于Java多线程的视频教程,适合初学者或者需要深化理解多线程的开发者学习。下面我们将详细探讨Java线程的相关知识点。 1. **线程的创建方式**: - *...

    [Java基础]猜测Java的interrupt和sleep做了什么

    在Java编程语言中,`interrupt()` 和 `sleep()` 是两个非常关键的方法,它们与线程的控制和管理密切相关。理解这两个方法的工作原理是构建多线程应用程序的基础。 首先,我们来探讨 `interrupt()` 方法。在Java中,...

    JAVA-multithreaded-programming.rar_Java @multithreaded_java prog

    在实际编程中,理解和掌握Java多线程编程对于提升程序性能和优化资源利用至关重要。通过阅读提供的"JAVA多线程编程详解-详细操作例子.doc"文档,你可以深入了解这些概念并学习如何在实际项目中应用。

Global site tag (gtag.js) - Google Analytics