Java Process詳解及實例
Runtime
Java可以通過Runtime來調(diào)用其他進程,如cmd命令,shell文件的執(zhí)行等。可以應該該類設(shè)置系統(tǒng)時間,執(zhí)行shell文件。此處記錄幾個有用應用如下。
設(shè)置本地時間
可以調(diào)用cmd /c date命令,完成本地時間設(shè)置,不過這個命令在win7下可以使用,但是win10需要管理員權(quán)限,可能無法設(shè)置系統(tǒng)時間。win7下使用Java實現(xiàn)修改本地時間代碼如下,需要注意的是waitFor是必須的,否則無法立即生效。
/**
* 設(shè)置本地日期
* @param date yyyy-MM-dd格式
*/
private static void setSystemDate(String date){
Process process = null;
String command1 = "cmd /c date "+date;
System.out.println(command1);
try {
process = Runtime.getRuntime().exec(command1);
//必須等待該進程結(jié)束,否則時間設(shè)置就無法生效
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}finally{
if(process!=null){
process.destroy();
}
}
}
網(wǎng)卡吞吐量計算
可以通過cat /proc/net/dev命令獲取網(wǎng)卡信息,兩次獲取網(wǎng)卡發(fā)送和接收數(shù)據(jù)包的信息,來計算網(wǎng)卡吞吐量。實現(xiàn)如下:
/**
* @Purpose:采集網(wǎng)絡帶寬使用量
* @param args
* @return float,網(wǎng)絡帶寬已使用量
*/
public static Double getNetworkThoughput() {
Double curRate = 0.0;
Runtime r = Runtime.getRuntime();
// 第一次采集流量數(shù)據(jù)
long startTime = System.currentTimeMillis();
long total1 = calculateThoughout(r);
// 休眠1秒后,再次收集
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 第二次采集流量數(shù)據(jù)
long endTime = System.currentTimeMillis();
long total2 = calculateThoughout(r);
// 計算該段時間內(nèi)的吞吐量:單位為Mbps(million bit per second)
double interval = (endTime-startTime)/1000;
curRate = (total2-total1)*8/1000000*interval;
System.out.println("收集網(wǎng)絡帶寬使用率結(jié)束,當前設(shè)備的網(wǎng)卡吞吐量為:"+(curRate)+"Mbps.");
return curRate;
}
/**
* 計算某個時刻網(wǎng)卡的收發(fā)數(shù)據(jù)總量
* @param runtime
* @return
*/
private static long calculateThoughout(Runtime runtime){
Process process = null;
String command = "cat /proc/net/dev";
BufferedReader reader = null;
String line = null;
long total = 0;
try {
process = runtime.exec(command);
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = reader.readLine()) != null) {
line = line.trim();
// 考慮多網(wǎng)卡的情況
if (line.startsWith("eth")) {
log.debug(line);
line = line.substring(5).trim();
String[] temp = line.split("\\s+");
total+=(Long.parseLong(temp[0].trim()));// Receive
total+=(Long.parseLong(temp[8].trim()));// Transmit
}
}
} catch (NumberFormatException | IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (process != null) {
process.destroy();
}
}
return total;
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
EasyUi+Spring Data 實現(xiàn)按條件分頁查詢的實例代碼
這篇文章主要介紹了EasyUi+Spring Data 實現(xiàn)按條件分頁查詢的實例代碼,非常具有實用價值,需要的朋友可以參考下2017-07-07
SpringCloud使用Ribbon實現(xiàn)負載均衡的流程步驟
在微服務架構(gòu)中,負載均衡是一項關(guān)鍵的技術(shù),它可以確保各個服務節(jié)點間的負載分布均勻,提高整個系統(tǒng)的穩(wěn)定性和性能,Spring Cloud 中的 Ribbon 就是一種負載均衡的解決方案,本文將深入探討 Ribbon 的原理和在微服務中的應用,需要的朋友可以參考下2024-02-02
玩轉(zhuǎn)spring boot 結(jié)合jQuery和AngularJs(3)
玩轉(zhuǎn)spring boot,這篇文章主要介紹了結(jié)合jQuery和AngularJs,玩轉(zhuǎn)spring boot,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01

