Runtime.getRuntime().exec()出现阻塞,导致后续程序无法运行!
来源:互联网 发布:java thread.sleep用法 编辑:程序博客网 时间:2024/05/16 18:37
我是参考这位仁兄做的。http://www.cnblogs.com/yejg1212/archive/2013/06/02/3114242.html 解决阻塞.
@SuppressWarnings("unchecked")
public class ExeSh {// 保存进程的输入流信息
private List<String> stdoutList = new ArrayList<String>();
// 保存进程的错误流信息
private List<String> erroroutList = new ArrayList<String>();
public void executeCommand(String command) {
// 先清空
stdoutList.clear();
erroroutList.clear();
Process p = null;
try {
p = Runtime.getRuntime().exec(command);
// 创建2个线程,分别读取输入流缓冲区和错误流缓冲区
ThreadUtil stdoutUtil = new ThreadUtil(p.getInputStream(), stdoutList);
ThreadUtil erroroutUtil = new ThreadUtil(p.getErrorStream(), erroroutList);
//启动线程读取缓冲区数据
stdoutUtil.start();
erroroutUtil.start();
p.waitFor();
LogUtil.printlnStr("启动完毕.");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public List<String> getStdoutList() {
return stdoutList;
}
public List<String> getErroroutList() {
return erroroutList;
}
class ThreadUtil implements Runnable {
// 设置读取的字符编码
private String character = "GB2312";
private List<String> list;
private InputStream inputStream;
public ThreadUtil(InputStream inputStream, List<String> list) {
this.inputStream = inputStream;
this.list = list;
}
public void start() {
Thread thread = new Thread(this);
thread.setDaemon(true);//将其设置为守护线程
thread.start();
}
public void run() {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(inputStream, character));
String line = null;
while ((line = br.readLine()) != null) {
if (line != null) {
list.add(line);
}
}
} catch (IOException e) {
LogUtil.pSTS(e);
} finally {
try {
//释放资源
inputStream.close();
br.close();
} catch (IOException e) {
LogUtil.pSTS(e);
}
}
}
}
/**
* java 调用shell脚本
* @param dataSetMap
* @param parameter
* @return Object
* @throws Exception
*/
public Object runShell(Map dataSetMap, Object parameter) {
Map<String, String> maps = new HashMap<String, String>();
DataSet calldataset = (DataSet) dataSetMap.get("calldataset");
Collection<FcznShellModel> pc = calldataset.getRecords();
String sh = pc.iterator().next().getSh();
ExeSh util = new ExeSh();
util.executeCommand("/bin/sh "+sh);
printList(util.getStdoutList());
printList(util.getErroroutList());
maps.put("system", "执行完成。。。" + sh);
return maps;
}
public static void printList(List<String> list){
for (String string : list) {
LogUtil.printlnStr(string);
}
}
}
0 0
- Runtime.getRuntime().exec()出现阻塞,导致后续程序无法运行!
- Runtime.getRuntime().exec执行阻塞问题解决
- Runtime.getRuntime().exec(command)的阻塞问题
- Runtime.getRuntime().exec()进程阻塞问题
- Runtime.getRuntime().exec()执行阻塞问题解决
- Runtime.getRuntime().exec()进程阻塞问题
- Runtime.getRuntime().exec执行阻塞问题解决 .
- Runtime.getRuntime().exec() 输出流阻塞问题
- Runtime.getRuntime().exec 导致的内存溢出
- RunTime.getRuntime().exec()运行脚本命令介绍和阻塞
- 用Runtime.getRuntime().exec()调用外部程序.
- Runtime.getRuntime().exec() 输出流阻塞的解决方法
- Runtime.getRuntime().exec();里面产生停滞(阻塞,blocking)
- java调用命令行Runtime.getRuntime().exec()阻塞问题
- Runtime.getRuntime().exec()执行一连串命令阻塞解决
- Runtime.getRuntime().exec() 输出流阻塞的解决方法
- Runtime.getRuntime(). exec( )
- java Runtime.getRuntime().exec
- 极品飞车(并查集+枚举)
- Linux C系统编程:信号与定时器的使用
- shell学习笔记
- Visual Studio 2013 、Matlab 2014产品密钥
- opencv实现灰度图像的直方图点计算以及灰度直方图显示
- Runtime.getRuntime().exec()出现阻塞,导致后续程序无法运行!
- Storm集群安装部署步骤【详细版】
- Rabbitmq 学习笔记(四)HA
- MySQL数据库SYS CPU高的可能性分析
- 我的Android进阶之旅------>关于使用Android Studio替换App的launcher图标之后仍然显示默认的ic_launcher图标的解决方法
- rxJava------>看我72变
- eclipse下git的配置和使用
- Error creating context 'spring.root': InputStream is null from Resource
- MyEclipse2015+Tomcat+MAVEN+SVN项目环境搭建