对于IO这种资源无法通过interrupt()方法中断,但是在实际应用中想中断的话,可以尝试关闭任务在其上发生中断的底层资源。
=================
public class IOBlocked implements Runnable{
private InputStream is;
public IOBlocked(InputStream is) {
this.is=is;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Waiting For Read...");
try {
is.read();
} catch (IOException e) {
// TODO Auto-generated catch block
if(Thread.currentThread().isInterrupted()){
System.out.println("Interrupted from blocked I/O");
}else{
throw new RuntimeException(e);
}
}
System.out.println("Exiting IOBlocked.run()");
}
}
========================强行中断方法==================
public class CloseResource {
public static void main(String[] args) throws Exception{
ExecutorService exec=Executors.newCachedThreadPool();
ServerSocket server=new ServerSocket(8080);
InputStream socketInput=new Socket("localhost",8080).getInputStream();
exec.execute(new IOBlocked(socketInput));
exec.execute(new IOBlocked(System.in));
TimeUnit.MILLISECONDS.sleep(100);
System.out.println("shut down all threads");
exec.shutdownNow();
TimeUnit.SECONDS.sleep(1);
System.out.println("closing "+socketInput.getClass().getName());
socketInput.close();
TimeUnit.SECONDS.sleep(1);
System.out.println("closing "+System.in.getClass().getName());
System.in.close();
}
}
-----------------执行结果如下:
Waiting For Read...
Waiting For Read...
shut down all threads
closing java.net.SocketInputStream
Interrupted from blocked I/O
Exiting IOBlocked.run()
closing java.io.BufferedInputStream
分享到:
相关推荐
题主最近开始接触和FPGA的方案验证相关的工作内容,需要把握FPGA内部资源的详细信息,所以又仔细查看了官方的器件手册。这一次给大家分享的内容主要涉及Xilinx FPGA内的CLBs,SelecTIO和Clocking资源,适合对FPGA...
中断大全资料涵盖了计算机系统中所有可能的中断,包括中断号、中断功能以及中断参数,是理解和调试系统底层运行的关键资源。 在计算机体系结构中,中断被分为两类:硬件中断和软件中断。硬件中断是由外部设备(如...
这个阶段主要完成一些基本的保护工作,例如关闭中断源,防止中断嵌套。 2. **中级中断处理**(Second Level Interrupt Handler,SLIH):在初级处理之后,中级处理接手,通常涉及更复杂的系统服务,如更新中断统计...
通过使用STM32中断配置器,开发者可以专注于应用程序逻辑,而无需过多关注底层硬件细节,提高开发效率,减少错误,使得STM32的中断管理变得更加容易。这款工具对于初学者和经验丰富的工程师来说都是一种宝贵的资源,...
本文将深入探讨如何在Texas Instruments的DSP6678处理器上实现GPIO中断,包括底层代码实现、中断跳转、中断机理以及中断向量表的配置。 首先,了解GPIO中断的基本概念。GPIO中断允许处理器通过检测GPIO引脚电平的...
标题中提到的“STM32F030 IO口外部中断应用”,其中的STM32F030是一种...文档不仅给出了完整的初始化流程,还涉及到了底层函数和配置寄存器操作,对于希望深入理解STM32外设编程和中断管理的读者具有很大的参考价值。
6. **中断禁止和中断允许**:通过特定的寄存器位,我们可以控制中断的开启和关闭,这在需要避免中断干扰或保护关键代码段时非常有用。 7. **Protues仿真**:在Protues环境中,我们可以设置中断源,例如通过按键模拟...
在IT领域,汇编语言是一种低级编程语言,它与机器语言紧密相关,直接对应于计算机硬件的...通过`INTWIN.GID`和`INTWIN.HLP`等资源,开发者可以深入了解Windows系统下的汇编中断,从而编写出高效、精确的系统级代码。
《Android底层开发技术实战详解》是一本面向Android底层开发者的专业书籍,旨在深入解析Android系统的内核层次结构、驱动程序开发、性能优化等关键领域的知识。本书内容丰富,覆盖了从硬件接口到软件实现的各个层面...
虽然这部分内容似乎与中断程序设计关系不大,但它提供了一些关于硬件资源管理和DOS分区的背景知识,这在理解计算机系统的底层操作时同样重要。DOS分区的管理策略直接影响到硬盘空间的利用率和软件开发效率。当盘区...
总的来说,STM32串口中断程序设计涉及到嵌入式系统的底层通信协议、中断机制和微控制器的硬件特性,是开发过程中的关键环节。通过理解这些知识点,开发者能够有效地实现高速、低延迟的数据传输。
89C52是一款经典的8位单片机,由美国Atmel公司生产,内置了丰富的硬件资源,包括多个中断源和两个定时/计数器。中断系统是单片机处理外部事件的关键机制,它允许CPU在执行正常程序的同时,对突发事件进行快速响应。...
7. **中断服务子程序**:中断服务程序是处理中断事件的函数,应快速高效,避免长时间占用CPU资源。通常需要清除中断标志、执行相应处理逻辑并最终恢复中断状态。 8. **中断优先级**:中断控制器可以设置中断优先级...
总的来说,这个示例涵盖了从驱动开发到应用程序的完整中断处理流程,是学习Linux中断系统和驱动开发的宝贵资源。通过分析和实践这些代码,开发者可以深入理解中断处理的原理,提高在Linux环境下的系统级编程能力。
6. 关闭或暂停中断:当需要临时关闭中断功能时,可以使用HAL_EXTI_Disable_IT(),若需恢复,使用HAL_EXTI_Enable_IT()。全局中断可通过HAL_DisableInterrupts()和HAL_EnableInterrupts()进行控制。 项目中的代码...
ECOS通过硬件抽象层(HAL)来隐藏底层硬件中断系统的具体实现细节,使得开发者能够专注于中断事件的处理,而不必关心底层硬件的具体差异。 在传统的中断处理程序中,通常需要为每种特定的硬件平台编写中断服务程序...
在6410处理器中,我们需要配置中断控制器来开启或关闭特定的中断源,如按键中断,并设置中断优先级。 在6410裸机按键中断的实现中,首先需要设置GPIO引脚作为输入模式,用于检测按键状态。当按键被按下时,对应的...
汇编语言是与硬件紧密相关的编程语言,通过学习8086中断手册,你可以掌握如何直接控制硬件资源,实现更高效的程序设计。比如,你可以编写中断处理程序来优化系统的响应时间,或者创建自定义的设备驱动来扩展系统功能...
8259的编程接口包括两个端口,一个用于写入初始化命令和操作命令(ICW和OCW),另一个用于读取和写入中断屏蔽字,控制中断的开启和关闭。中断屏蔽字允许系统根据需要动态地启用或禁用中断。 "8259演示系统"可能是...