JAVA控制CPU占用率(编程之美有感)(二)
继续上次的电脑CPU控制,很遗憾更新的有点慢,虽然我知道没人看,最近项目上任务有点多,所以时间少了点,不过我是达不到目的是不会放弃的!
上次勉强能达到有点类似于直线的CPU占用率控制图,但是这只是所有CPU的平均工作,远不能达到每个CPU都受我控制显示一条直线的程序,这几天没写博客但是也想了挺多,我想既然我电脑是4个CPU,那我创建4个实体,每个实体都跑百分之五十呢?心痛不如行动,上代码:
public static void main(String[] args) throws InterruptedException { ComputeProcess th1= new ComputeProcess(); ComputeProcess th2= new ComputeProcess(); ComputeProcess th3= new ComputeProcess(); ComputeProcess th4= new ComputeProcess(); th2.runProcess(); th3.runProcess(); th4.runProcess(); th1.runProcess(); } } private static void runProcess(){ long busyTime = 5; Thread th = Thread.currentThread(); long nowSys = System.currentTimeMillis(); while (true) { nowSys = System.currentTimeMillis(); while ((System.currentTimeMillis() - nowSys) <= busyTime) { } try { th.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } } }
阿西吧,想那么好但是没什么卵用啊!
发了一会呆,突然想起来,我创建实体没什么卵用啊,并不影响CPU的工作啊啊啊啊,应该创建线程试试的啊~~果断让程序继承了Thread类,并重写了run方法,让run去调用runProcess,不要问我为什么不在run方法里面写,因为我懒!!!然后把所有的th_.runProcess()改成th_.start(),再看一下效果图:
哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈!
终于有希望了啊啊啊啊啊啊啊啊!
下面就是考虑要控制计算机的内存了,这样只是自己手动配置busy和idle比率为50%但是系统本身就会运行好多内存,所以这个比例一直会大于50.从网上搜了一下可以使用sigar进行查看系统的信息:
使用sigar来监控,简单方便!
使用说明:以下代码需要配合sigar的dll文件来用,需要将dll文件放到JDK下的bin文件夹下。原文:点击打开链接。原文中没有sigar下载地址,不过有需要的话可以私信或者发邮件给我我给你发shaohuaqc@sina.com.
下面是使用siger的控制台得到的信息: