12345678
public static void main(String[] args) {System.out.println("开始进入程序...") //do somethingSystem.out.println("程序准备退出了!") System.exit(0) //下面这句话将不会打印出来System.out.println("程序已经退出了!")}
但是使用exit方法的本质是终止了JVM的运行,如果同时运行了另外一个程序,使用exit方法同样也会使该程序也终止,要避免此种情况可以使用interrupt()来中断退出一个独立运行的过程。对于多线程程序,必猛含迟须要关闭各个非守护线程。
1234567891011121314151617181920212223
public static void main(String[] args) {System.out.println("开始进入程序...") //do somethingnew Thread(){public void run() {while (true) {System.out.println("我是另外的线程...") try {Thread.sleep(2000) } catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace() }}}}.start()//获取man线枝李程Thread main = Thread.currentThread() System.out.println(main.getName()) main.interrupt() System.out.println("老燃main线程已经退出了,但是不影响其他线程运行!") }
只有在程序非正常退出时,才使用exit方法退出程序。
办法肯定有啦,最武断的办法就是直接调用Process类的destroy方法,该子进程就被杀死。当然这是最底层的办法,使用中还需要包装,比如用循环和sleep来计时,超时了才调用destroy。也可以根据实际情况,做成异步调用(让这个进程在单独的线程中运行),这样你的主程序就不会被挂起了。以上这些包装,其实在apache commons项目里已经有这样的库了,叫commons-exec,用它最方便,毕竟包装它们还是苦差事(涉及到多线程,新开一个进程,Java中需要再开三个线程来处理进程的三个数据流,分别是标准输入,标准输出和错误输出)。commons-exec库提供了监视狗Watchdog来圆改设监视进程的执行超时,同时也还实现厅薯了同步和异步功能。建议你用它,如果只求简单快扮腔者速解决问题,自己简单地使用循环和Thread.sleep(1000)来计时,超时就destroy也行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)