问题描述
- java多进程调度的问题,求大神帮忙。
- 我是使用ffmpeg.exe来进行视频格式的转换的:
第一:我执行一个main方法,这时(java.exe)这个进程就会被load到内存中被执行,然后继续执行main的主线程。
第二:这时我又开了一个其他线程来执行视频的格式转换,此时会帮我新创建出一个新进程(ffmpeg.exe)来。
第三:这时候出现了两个进程随之而来的也出现了问题。经过分析测试发现:
1、只有java.exe进程结束后,才会执行ffmpeg这个进程。这并不是我想要的。
2、我需要的执行顺序是这样:先执行java.exe进程,再转码进程ffmpeg.exe执行完,然后再继续java.exe进程
3、因为在执行ffmpeg.exe这个进程中,我需要通过java.exe进程 来检测ffmpeg.exe进程的视频转码是否完成,返回给客户端,判断是否继续执行我的问题:
1、java在创建进程的时候是否可以设置该进程的优先级?
2、我可以通过java来获取一个进程的执行时间么?
3、为什么只有在java.exe进程结束后才会执行ffmpeg.exe进程?
4、默认的cpu调度进程的算法是什么算法啊?(windows)特别说明:
1、可能我的表达不是很清楚,各位大神的帮忙,小弟不胜感激。
2、文字会比较多,如果看不太懂,我可以具体说说
解决方案
按照我的理解,你的需求就是在java的主进程中调用一个ffmpeg.exe,这个在java中应该是这样的代码:
String[] cmdArray = buildComStringArray(cmd);//忽略实现cmd就是你的fmpeg.exe
ProcessBuilder pb = new ProcessBuilder(cmdArray);
pb.redirectErrorStream(true);
Process child = pb.start();
然后就可以使用child.waitFor();等待结束后继续你的java其他业务逻辑
解决方案二:
首先线程是独立运行的。线程开启,他就会运行。线程的一个作用就是让主进程运行下去,不用等待!按照你的想法,你不如不要用线程去转吗,因为你需要等待线程完成去继续执行主线程。根本就没必要用线程?