runtime

1.首先,runtime是无构造函数的,故它不能 使用new出对象。因此它是静态的。可以提供方法获取本类对象,并且返回值也是本类类型

2.runtime 是每个Java程序都有的,允许应用程序和应用运行程序的环境进行接口,应用程序无法创建此类的实例。

3.属于singleton模式的(单例模式),就是一次只能创建一个实例,而且自行实例化并向整个系统提供这个实例。

二.

1.getruntime():返回与当前Java应用程序关联的运行时的对象。在Java中唯一得到JVM运行时环境的的办法。

2.runtime 中的exit()方法:通过启动关闭序列来终止当前正在运行的java虚拟机,

虚拟机的的关机顺序由两部分组成:

1.      所有注册的shutdownhook(如果有的话)以某种未指定的顺序启动,并允许同时运行直到完成。

2.      所有未调用的的终结器隐形finalization-on-exit已启动,一旦完成了虚拟机halts(也就是说完成之后虚拟机停止)。

注意:如果虚拟机已经开始关闭序列后启用此方法,如果关闭挂钩正在运行,那么此方法将无期限的阻止;

如果关闭挂钩已经运行,并且启用了退出完成,如果状态为非零的话,那么它将使用给定状态代码暂停虚拟机;否则,它将无期限的阻止

非零:为异常终止

System.exit(n)实际上等效于Runtime.getRuntime().exit(n);

3.addShutdownHook(Thread hook):注册一个新的虚拟机关机挂钩。

         一个关闭钩子只是一个初始化但为启动的线程 ,当虚拟机开始关闭序列后,它将用未指定的顺序启动所有注册的关闭钩子,并让它们同时运行。当所有的钩子已经运行完成,如果启动了最终确定的退出,它将运行所有未被终止的终结器,

注意:

         1.一个关闭序列启动后,就不可能注册新的关闭挂钩或者取消先前注册的关闭挂钩,尝试这些操作将抛出异常。

         2.一旦开始了关闭序列,只能通过强行终止虚拟机的halt方法来停止它。

4.exct()方法:创建进程

package 书籍练习;


public class aaa {
public static void main(String[] args) {

Runtime t=Runtime.getRuntime();
try{
t.exec("C:\\Program Files\\Internet Explorer\\iexplore.exe");//在单独的进程中执行指定的字符串命令。
}catch(Exception e){
System.out.println("异常打开");
}
}
}//结果是:打开了internet浏览器
关闭进程

创建进程后关闭进程

package 书籍练习;


public class aaa {
public static void main(String[] args) {

Runtime t=Runtime.getRuntime();
try{
Process p=t.exec("notepad.exe");//用来控制进程并获取它的有关信息
Thread.sleep(4000);//是当前执行的进程以指定的毫秒数进行暂停。
p.destroy();//终止线程
}catch(Exception e){
System.out.println("异常");
}

}
}//结果是:打开了记事本后,自己又关闭


 小知识:

         我们什么时候用waitFor方法,什么时候用exitValue方法

         答:在我们不能判断程序什么时候执行完毕而我们还需要执行的情况下,需要使用exitValue方法来获得外部命令的返回状态,并且在外部命令返回时做出相应的处理。而waitFor方法是当前线程阻塞的,如果外部命令无法执行结束,那么你的线程会一直阻塞下去的。


 

你可能感兴趣的:(Java)