有没有IO非阻塞模式实现方式,求给个实例

问题描述

stream=Runtime.getRuntime().exec(command).getInputStream();while((i=stream.read())!=-1){System.out.print((char)i);}当这个线程开启后,一直停留再read()中,会造成阻塞,有没有非阻塞实现方式。

解决方案

解决方案二:
IO不阻塞的话读什么啊。。。?非要继续运行的话多开一个线程吧
解决方案三:
要非阻塞就用javanio了
解决方案四:
停留在(i=stream.read())!=-1是你写的不对吧。结束的标志是-1么?我记得这种执行指令的结束就是为空吧?
解决方案五:
参考javanio
解决方案六:
意图不明,如果你是想等命令执行完再继续执行,那就应该要阻塞;如果不想阻塞,那把read放到另外一个线程就可以了,或者参考java.nio
解决方案七:
启动一个线程来处理就不会阻塞在那里了。IO操作你就得让代码停留在等待读取那里,即便是nio也需要通过轮询的方式让代码一直停留在等待数据那里。否则的话,后面的代码执行完了程序将结束,你的读取操作还有什么意义?

时间: 2024-09-13 11:48:21

有没有IO非阻塞模式实现方式,求给个实例的相关文章

看到关于socket非阻塞模式设置方式记录一下。

关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的:我打个很简单的比方,如果你调用socket send函数时: 如果是阻塞模式下: send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR:如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么

简单介绍PHP非阻塞模式_php实例

非阻塞模式是指利用socket事件的消息机制,Server端与Client端之间的通信处于异步状态. 让PHP不再阻塞当PHP作为后端处理需要完成一些长时间处理,为了快速响应页面请求,不作结果返回判断的情况下,可以有如下措施: 一.若你使用的是FastCGI模式,使用fastcgi_finish_request()能马上结束会话,但PHP线程继续在跑. echo "program start."; file_put_contents('log.txt','start-time:'.da

Socket的阻塞模式和非阻塞模式

阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里.相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行. 在阻塞模式的套接字上,调用任何一个Windows Sockets API都会耗费不确定的等待时间.图所示,在调用recv()函数时,发生在内核中等待数据和复制数据的过程. 当调用recv()函数时,系统首先查是否有准备好的数据.如果

UDP socket 设置为的非阻塞模式

UDP socket 设置为的非阻塞模式 Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), MSG_DONTWAIT, (struct sockaddr *)&SockAddr,&ScokAddrLen); UDP socket 设置为的阻塞模式 Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), 0, (struct sockaddr *)&SockAddr,&a

阻塞模式和非阻塞模式

好文得转~~~ 何为阻塞?  从该网络通讯过程来理解一下何为阻塞 :  在以上过程中若连接还没到来,那么 accept 会阻塞 , 程序运行到这里不得不挂起, CPU 转而执行其他线程.  在以上过程中若数据还没准备好, read 会一样也会阻塞.  阻塞式网络 IO 的特点:多线程处理多个连接.每个线程拥有自己的栈空间并且占用一些 CPU 时间.每个线程遇到外部为准备好的时候,都会阻塞掉.阻塞的结果就是会带来大量的进程上下文切换.且大部分进程上下文切换可能是无意义的.比如假设一个线程监听一个端

深入CSocket编程之阻塞和非阻塞模式

本文适合初中级读者阅读 有时,花上几个小时阅读.调试.跟踪优秀的源码程序,能够更快地掌握某些技术关键点和精髓.当然,前提是对这些技术大致上有一个了解. 我通过几个采用 CSocket 类编写并基于 Client/Server (客户端 / 服务端)的网络聊天和传输文件的程序 ( 详见: 源代码参考 ) ,在调试这些程序的过程中,追踪深入至 CSocket 类核心源码 Sockcore.cpp , 对于CSocket 类的运行机制可谓是一览无遗,并且对于阻塞和非阻塞方式下的 socket 程序的编

非阻塞IO模式原理

与阻塞模式对应的另一种模式叫非阻塞IO模式,在整个通信过程中读和写操作不会阻塞,当前处理线程不存在阻塞情况.从A机器到B机器它的通信过程是:A机器一条线程将通道设置为写事件后往下执行,而另外一条线程遍历到此通道有字节要写并往socket写数据,B机器一条线程遍历到此通道有字节要读,交给另外一条线程对socket读数据,处理完又把通道设置为写事件,遍历线程遍历到此通道有字节要写,又往socket写数据传往A机器,不断往下循环此操作直到完成通信.这个过程每台机器都有两类主要线程,一类是负责逻辑处理且

关于网络IO中的同步、异步、阻塞、非阻塞

在高并发编程当中,我们经常会遇到一些异步.非阻塞等一些概念,一些常用的技术比如异步的httpclient.netty nio.nginx.node.js等,它们的原理大都跟异步.非阻塞有关.特别是在服务器开发中,并发的请求处理是个大问题,阻塞式的函数会导致资源浪费和时间延迟.通过事件注册.异步函数,开发人员可以提高资源的利用率,性能也会改善.其nginx和node.js处理并发都是采用的事件驱动异步非阻塞模式.其中nginx中处理并发用的是epoll,poll,queue等方式,node.js使

C实现的非阻塞方式命令行端口扫描器源码_C 语言

该实例是一个C实现的基于命令行模式端口扫描代码,并且是以非阻塞方式来实现对IP和端口的连接测试.为了大家使用和学习方便,已在代码中尽可能多的地方加入了注释,相信对于帮助大家理解C端口扫描有很大帮助. 具体功能代码如下: #include <afxext.h> #include <winsock.h> // 编译时需使用的库 #pragma comment(lib,"wsock32.lib") // select()成员定义 #define ZERO (fd_se