##0預備知識
Runtime類是一個與JVM運行時環境有關的Singleton類,有以下幾個值得注意的地方:
0.1 Runtime.getRuntime()可以取得當前JVM的運行時環境,這也是在Java中唯一得到運行時環境的方法。
0.2 Runtime上其他大部分的方法都是實例方法,也就是說每次進行運行時調用時都要用到getRuntime
方法。
0.3 Runtime中的exit方法是退出當前JVM的方法,估計也是唯一的。System類中的exit實際上也是通過調用Runtime.exit()來退出JVM的。
Java對Runtime返回值的一般規則,0代表正常退出,非0代表異常中止,這只是Java的規則,在各個操作系統中總會發生一些小的混淆。
0.4 Runtime.addShutdownHook()方法可以注冊一個hook在JVM執行shutdown的過程中,方法的參數只要是一個初始化過但是沒有執行的Thread實例就可以。(注意,Java中的Thread都是執行過了就不值錢的哦)
0.5說到addShutdownHook這個方法就要說一下JVM運行環境是在什么情況下shutdown或者abort的。
Shutdown:當最后一個非精靈進程退出或者收到了一個用戶中斷信號、用戶登出、系統shutdown、Runtime的exit方法被調用時JVM會啟動shutdown的過程,在這個過程開始后,他會并行啟動所有登記的shutdown hook(注意是并行啟動,這就需要線程安全和防止死鎖)。當shutdown過程啟動后,只有通過調用halt方法才能中止shutdown的過程并退出JVM。
Abort: abort退出時JVM就是停止運行但并不一定進行shutdown。這只有JVM在遇到SIGKILL信號或者windows中止進程的信號、本地方法發生類似于訪問非法地址一類的內部錯誤時會出現。這種情況下并不能保證shutdown hook是否被執行。
0.6 Runtime.exec()方法的所有重載。這里要注意的是:
public Process exec(String[] cmdarray, String[] envp, File dir);
這個方法中cmdArray是一個執行的命令和參數的字符串數組,數組的第一個元素是要執行的命令往后依次都是命令的參數,envp中是name=value形式的環境變量設置,如果子進程要繼承當前進程的環境時是null。
'啟動線程池時候調用 線程數量為CPU的數量'
ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
http://jiangshuiy.iteye.com/blog/1674235
http://outofmemory.cn/code-snippet/2253/java-usage-Runtime-availableProcessors-get-keyong-chuliqi-geshu
要顯示java虛擬機可用的處理器個數,可以通過Runtime類的availableProcessors()方法得到。
要獲得Runtime類的實例,需要調用其靜態方法getRuntime(),如下例所示:
/**
* Main.java
*
*@authoroutofmemory.cn
*/
publicclassMain{
/**
* Displays the number of processors available in the Java Virtual Machine
*/
'publicvoiddisplayAvailableProcessors(){'
''Runtimeruntime=Runtime.getRuntime();''
"intnrOfProcessors=runtime.availableProcessors();"
System.out.println("Number of processors available to the Java Virtual Machine: "+nrOfProcessors);
}'
/**
* Starts the program
*@paramargs the command line arguments
*/
publicstaticvoidmain(String[]args){
newMain().displayAvailableProcessors();
}
}