Process 的 waitFor() 造成的阻塞
我们在调用Process的waitFor()时经常会遇到明明Process已经结束了,但是waitFor()还是阻塞在那里,那是因为Process的inputStream缓存造成的,我们现在另外再起一个线程,来监控我们的Process,实时清空缓存就可以解决这个问题了。
class WatchThread extends Thread { Process p; boolean over; ArrayList<String> stream; public WatchThread(Process p) { this.p = p; over = false; stream = new ArrayList<String>(); } public void run() { try { if(p == null)return; Scanner br = new Scanner(p.getInputStream()); while (true) { if (p==null || over) break; while(br.hasNextLine()){ String tempStream = br.nextLine(); if(tempStream.trim()==null||tempStream.trim().equals(""))continue; stream.add(tempStream); } } } catch(Exception e){e.printStackTrace();} } public void setOver(boolean over) { this.over = over; } public ArrayList<String> getStream() { return stream; } }
这样,即清空了inputStream,又不会造成需要的人无法获取inputStream的信息,waitFor()阻塞的问题也解决了。
<span style="font-size:24px;"></span><pre name="code" class="java">在waitFor之前插入
WatchThread wt = new WatchThread(p); wt.start();
在waitFor后之后插入
- ArrayList<String> commandStream = wt.getStream();
- wt.setOver(true);
Process 的 waitFor() 造成的阻塞相关推荐
- Java Process中waitFor()的问题
Java Process中waitFor()的问题 http://yearsaaaa123789.iteye.com/blog/1404865 在编写Java程序时,有时候我们需要调用其他的诸如exe ...
- java process的waitfor()阻塞问题
http://blog.csdn.net/jimzhai/article/details/7864806 Runtime runtime = Runtime.getRuntime(); Process ...
- Process的waitFor死锁问题以及解决方案
1.发现问题 在实际开发中,进行文件操作时,使用Process对文件进行解压操作,程序执行过程中会出现一直卡在那的问题. 2.原因查找 问题在缓冲区这个地方:可执行程序的标准输出比较多,而运行窗口的标 ...
- Process的waitFor死锁问题及解决办法
一.问题再现 使用wkhtmltopdf插件做html转换pdf,打印条码标签. 打印两三张没问题,打印多了程序就出现这种卡死的情况,等很久程序也没有反应,也不报错,后台也没有程序输出.试了几次都是这 ...
- C#调用cmd出现Process线程假死或阻塞现象的官方解决方案
引言:今天好郁闷啊,把手机给摔了,问了一下官网维修点,得花500大洋,我这是造的什么孽啊啊啊啊啊啊啊.............. 回到正题,之前C#调用cmd,读取GDAL输出的结果,一直好好的.直到 ...
- Java Process.waitFor() 阻塞卡住不返回
1. 现象 在Java程序中,启动另一个进程执行一个命令时可以使用ProcessBuilder类启动一个进程. 以运行 ps 命令为例: ProcessBuilder processBuilder = ...
- 怎样判断子进程已经结束 process.waitFor();的问题
怎样判断子进程已经结束 process.waitFor();的问题 2009年07月31日 14:38 来源:普索网 发表于:2007-02-28 10:25:04 楼主 ProcessBuild.c ...
- Java Process waitFor()方法与示例
流程类的waitFor()方法 (Process Class waitFor() method) waitFor() method is available in java.lang package. ...
- java 使用Process调用exe程序 及 Process.waitFor() 死锁问题了解和解决
前言 最近在开发android的同时也在开发java ,碰到了需要使用java 程序调用exe的需求,这里我使用的 process 来调用的.该篇文章 读完需要8+分钟,文章类型为 小白入门类型,此处 ...
最新文章
- 【协议分析】Wireshark 过滤表达式实例
- [ATF]-MTK:一篇文章了解ATF原理
- Web消息主体风格(Message Body Style)
- Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
- java 能重写构成函数_java函数重载和函数重写
- X64-CL iPro 采集卡OC-64EO-IPRO0简介
- 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...
- 浅析bin,lib,src的区别
- SpringBoot 集成 Caffeine、Redis实现双重缓存方式(二)
- fiddler限速_fiddler限制网速
- L2TP/L2TP over IPSec
- python下载bt文件_使用libtorrent-python下载Torrent
- [转] 如何制作华为手机的刷机包
- hdu2825(状压dp+AC自动机)
- [线性代数]矩阵(mooc秦静老师讲解)
- 使用unity完成简单的打地鼠游戏2D制作
- 树形动态规划(树状DP)小结
- 常见负载均衡服务器介绍
- 机器自动翻译古文拼音 - 十大宋词 - 声声慢 寻寻觅觅 李清照
- 阿里云国际版设置DNS托管和智能分流教程详解
热门文章
- 92%的企业雇主预计今年将招应届MBA毕业生,相较过去几年招聘意向强烈 | 美通社头条...
- 地理信息系统(Geographic Information System,GIS)
- 再看《周渔的火车》 转载一篇不错的影评
- 采用外中断控制的条形LED彩灯设计
- 在RHEL7或CentOS7中修改创建账号时系统默认UID、GID最小起始值及其他设置
- 一组相关联的问题:“sudo: unable to resolve host ###: Connection timed out”、软件启动速度超慢、IPv6无法使用...
- SnapdragonCamera源码分析(一)CameraActivity
- C++中重定义,重载,重写
- 黄东升: 栈缓冲区溢出攻击实例
- DSPC-PEG-R8/M2pep/CAG/CKAAKN/DGEA/Oct/TOC 磷脂-聚乙二醇-多肽