不同于IO,NIO通道会自动地相应中断,代码如下:
public class NIOBlocked implements Runnable{
private final SocketChannel sc;
public NIOBlocked(SocketChannel sc) {
this.sc=sc;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Wating to read in");
try {
sc.read(ByteBuffer.allocate(1));
}catch(ClosedByInterruptException ex){
System.out.println("ClosedByInterruptException...");
}catch(AsynchronousCloseException ae){
System.out.println("AsynchronousCloseException...");
}
catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("IOException...");
}
System.out.println("Exit NIOBlocked.run()");
}
}
==============================
public class NIOInterruption {
public static void main(String[] args) throws IOException, InterruptedException{
ExecutorService exec=Executors.newCachedThreadPool();
ServerSocket server=new ServerSocket(9111);
InetSocketAddress isa=new InetSocketAddress("localhost",9111);
SocketChannel sc1=SocketChannel.open(isa);
SocketChannel sc2=SocketChannel.open(isa);
Future<?> f=exec.submit(new NIOBlocked(sc1));
exec.execute(new NIOBlocked(sc2));
exec.shutdown();
TimeUnit.SECONDS.sleep(1);
f.cancel(true);//这里可以产生中断
TimeUnit.SECONDS.sleep(1);
sc2.close();
}
}
分享到:
相关推荐
当客户端检测到与服务器的连接中断后,会尝试重新建立连接。这通常涉及到重试策略,如设置一定的重试次数、重试间隔时间等,以防止因网络瞬时问题而频繁重连。此外,客户端也需要实现心跳机制,以便接收服务器的心跳...
NIO的Selector组件允许我们监听多个通道,一旦有数据可用,就能迅速响应,极大地提高了系统效率。 在“FilmServer”这个压缩包文件中,可能包含了一个用于演示或测试的电影服务器程序。这个服务器可能利用了NIO进行...
- **FTP协议解析**:需要理解FTP命令和响应的格式,例如`STOR`(上传)、`RETR`(下载)和`LIST`(列出目录)命令,以及相应的服务器响应代码。 - **线程管理**:为了处理多个并发连接,可能需要使用线程池或异步...
在实际应用中,需要考虑各种可能的异常情况,如网络中断、数据解析错误等,确保系统的健壮性。 总之,本项目通过Java NIO实现了非阻塞socket通信,有效地解决了高并发场景下的连接管理问题,提高了系统效率。对于...
Java线程的中断机制是一种优雅的终止或中断线程执行的方式,它允许线程在执行过程中响应中断请求,而不仅仅是简单地强制终止。中断机制的核心在于,它允许线程在适当的时候从阻塞状态中退出,或者在执行过程中根据...
但是,线程本身并不会立即停止,除非它正在执行一个能够响应中断的方法。例如,如果线程在等待对象的`wait()`方法,调用`sleep()`,或者在`join()`其他线程,那么这些方法在检测到中断状态时会抛出`...
5. **中断和唤醒(Interrupt and Wakeup)**:NIO支持中断IO操作,当操作被中断时,系统会立即停止等待并抛出异常,使得线程可以更快地响应其他事件。 6. **文件系统操作的增强**:NIO还提供了一些高级文件系统功能...
5. **事件驱动模型**:Neuron可能采用事件驱动模型,当有新的连接、数据到达或者连接关闭时,框架会触发相应的事件,开发者通过编写事件处理器来响应这些事件。 6. **多线程与并发**:在Java NIO框架中,通常通过...
客户端可以请求文件,服务端响应并传输文件内容。这种模式常见于FTP、HTTP等协议的实现。 5. **Java NIO(New I/O)**: Java NIO是Java 1.4引入的,提供了非阻塞I/O和选择器(Selector)等特性,相比传统的IO模型...
HttpCore通过异常处理机制来处理HTTP交互中的错误,如网络中断、超时或无效响应等。这些异常通常被封装为HttpException,并可以通过异常层次结构进行捕获和处理。 通过对HttpCore 4.0-alpha3的源代码分析,我们...
7. **异常处理**:在实现此类程序时,应考虑网络中断、超时、服务器无响应等异常情况,并通过适当的异常处理机制确保程序的稳定性和可靠性。 8. **日志记录**:为了调试和监控程序运行,通常会集成日志框架,如Log4...
在代码实现中,通常会使用C++、Java、Python等支持多线程的编程语言,结合标准库或第三方库如Boost.Asio、Java NIO、Python的socketserver模块等进行开发。 总的来说,编写一个多线程的HTTP 1.0 Web服务器需要理解...
心跳协议主要用于确保连接的活跃性,检测并处理网络中断或长时间无数据交换导致的假死情况。MINA框架提供了心跳机制的内置支持,使得开发者可以轻松地在应用中集成这一功能。 在描述中,“使用MINA自带的心跳协议...
Nios II/r强调实时响应,适用于实时控制类应用。 中文参考手册是学习和掌握Nios II处理器的关键资料,它涵盖了处理器的体系结构、指令集、中断处理、存储系统、调试工具以及软硬件接口等多个方面。通过这份手册,...
此外,为了提高性能和避免阻塞,可以考虑使用异步I/O(NIO)或Java 7引入的`java.nio.channels.AsynchronousSocketChannel`。这种方式允许并发处理多个连接,而无需为每个连接创建一个新线程,从而减少资源消耗。 ...
4. **写入文件**:使用`java.nio`的FileChannel和ByteBuffer,从HTTP响应的输入流中读取数据,并将其写入本地文件,同时更新已下载的字节数。 5. **持续监控**:在下载过程中,不断检查网络连接状态,如果发现中断...
6. **异常处理**:在进行网络编程时,网络中断、超时、数据解析错误等问题常见。面试者应熟悉如何使用try-catch-finally结构捕获和处理这些异常,以及如何设计健壮的错误处理策略。 7. **网络安全**:在实际项目中...
9. **错误处理**:良好的错误处理机制是必要的,包括验证文件是否成功上传或下载,以及处理网络中断等异常情况。 10. **响应头设置**:在下载文件时,需要正确设置HTTP响应头,如`Content-Disposition`指定附件名,...
7. **异常处理**:在处理网络请求时,可能会遇到各种异常,如文件未找到、网络中断等,需要适当地捕获和处理这些异常。 8. **日志记录**:为了便于调试和分析,服务器通常会记录请求和响应的详细信息。这可以通过...