java--Progress类的使用浅析

java--Progress类的使用浅析

Progress的简要说明

Process类是一个抽象类方法都是抽象的,它封装了一个进程,也就是一个可执行的程序

ProcessBuilder.start()Runtime.exec方法创建一个本机进程并返回Process子类的一个实例,该实例可以控制进程并获取相关的信息

  • ProcessBuilder与Process类的区别
    ProcessBuilder为进程提供了更多的控制,例如,可以设置当前工作目录,还可以改变环境参数。而Process的功能相对来说简单的多。
  • Runtime.exec使用
    • Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
    • 一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
    • 一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。
    • 当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。
    • 应用实例:

方法的使用说明:

* destory()方法杀死子进程
* waitFor()方法等待程序直到子程序结束
* exitValue()方法返回子进程结束时返回的值

下面是代码的实现:

ProcessTest的实现类

package net;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

public class ProcessTest {
	// 列出所有进程
	public static void main(String args[]) {
		ProcessTest pt = new ProcessTest();
//		pt.createProcess(args);
//		pt.scanProcess();
		pt.runtimeUse();
	}
	/**
	 * runtime的使用2
	 * Process的使用
	 * destory()方法杀死子进程
	 * waitFor()方法等待程序直到子程序结束
	 * exitValue()方法返回子进程结束时返回的值
	 */
	public void runtimeUse(){
		Runtime r = Runtime.getRuntime();
        Process p = null;
        try{
            p = r.exec("notepad");	//打开记事本
            p.waitFor();
        } catch (Exception e) {
            System.out.println("Error executing notepad.");
        }
        System.out.println("Notepad returned " + p.exitValue());
	}
	/**
	 * tasklist 获得进程句柄
	 * 进行扫描当前系统的所有进程
	 */
	public void scanProcess(){
		BufferedReader br = null;
		try {
			 Process proc = Runtime.getRuntime().exec("exefile"); //获得进程句柄
	
			br = new BufferedReader(
					new InputStreamReader(proc.getInputStream()));
			String line = null;
			String pid = null;
			int num = 0;
			System.out.println("打印所有正在运行的进程信息");
			while ((line = br.readLine()) != null) {
				System.out.println(line);

				num++;
			}
			System.out.println("一共有" + num + "个进程");
			System.out.println("pid为" + pid);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}		
	}

	/**
	 * 使用ProcessBuilder来创建一个process进程,去找e盘目录下的东西
	 */
	public Process createProcess(String[] args){
		Process process=null;
		try {
			ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir"); 
			builder.directory(new File("e:/")); 
			process=builder.start();
			InputStream is=process.getInputStream();
			InputStreamReader isr=new InputStreamReader(is,"GBK");
			BufferedReader br=new BufferedReader(isr);
			String line;
			System.out.printf("Output of running %s is:", Arrays.toString(args));
			while((line=br.readLine())!=null){
				System.out.println(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//进行关闭流
		}
		return process;
	}

	/**配合scanProces进行使用
	 * 
	 * @param line
	 *            输出此行的进程信息
	 * @param pid
	 *            进程的pid
	 * @return	是否执行成功
	 *	
	 */
	public boolean killPid(String line, String pid) {
		boolean isSuccess = false;
		if (line.contains(pid)) {
			// 获得pid,-7已经假设最大的进程pid为5位,外加一个空格
			pid = line.substring(line.indexOf("Console") - 7,
					line.indexOf("Console")); // indexof返回第一个字符出现的索引
			try {
				Runtime.getRuntime().exec("tskill " + pid);
				isSuccess = true;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return isSuccess;
	}
}

RunTime的测试类:

package net;

public class RunTimeTest {
	public static void main(String[] args){
		RunTimeTest rt=new RunTimeTest();
		rt.memoryDemo();
	}
	/**
	 * 内存管理
	 */
	public void memoryDemo(){
		 Runtime r = Runtime.getRuntime(); 
         long mem1,mem2; 
         Integer someints[] = new Integer[1000]; 
         System.out.println("Total memory is :" + r.totalMemory()); 
         mem1 = r.freeMemory(); 
         System.out.println("Initial free is : " + mem1); 
         r.gc(); 
         mem1 = r.freeMemory(); 
         System.out.println("Free memory after garbage collection : " + mem1); 
         //allocate integers 
         for(int i=0; i<1000; i++) someints[i] = new Integer(i);    
         mem2 = r.freeMemory(); 
         System.out.println("Free memory after allocation : " + mem2); 
         System.out.println("Memory used by allocation : " +(mem1-mem2));    
         //discard Intergers 
         for(int i=0; i<1000; i++) someints[i] = null; 
         r.gc(); //request garbage collection 
         mem2 = r.freeMemory(); 
         System.out.println("Free memory after collecting " + "discarded integers : " + mem2); 
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值