- public class CPUTest {
- //定义时间片大小(毫秒)
- public static final double TIME = 1000;
- //画直线方法
- private static void lineGraph(double rate) throws InterruptedException{
- while (true){
- doSomeSimpleWork(rate * TIME);
- Thread.sleep((long) (TIME - rate * TIME));
- }
- }
- //画正弦曲线方法
- private static void sinGraph() throws InterruptedException{
- double x = 0;
- double y = 0;
- while (true){
- y = (Math.sin(x) + 1) * TIME / 2;
- doSomeSimpleWork(y);
- x += 0.1;
- Thread.sleep((long) (TIME - y));
- }
- }
- //占用CPU方法
- private static void doSomeSimpleWork(double time) {
- long startTime = System.currentTimeMillis();
- while ((System.currentTimeMillis() - startTime) < time) {
- }
- }
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) throws InterruptedException {
- lineGraph(0.5);
- sinGraph();
- }
- }
package cglib;
public class jiekou {
public static void drawLine(){
int usage = 700;
System.out.println("Test Begins...");
while(true){
long start = System.currentTimeMillis();
while(System.currentTimeMillis() - start < usage );
try{
Thread.sleep(1000-usage);
}catch(Exception e){
System.out.print(e);
}
}
}
public static void drawSin(){
double x = Math.PI / 2;
while(true){
//下面这一句+1是因为sinx可能为负数,最大为-1,加上1的话就保证为正了
//*0.5是应为加1之后,最大数可能达到2,为了限制在1以内,所以*0.5
long usage = (long)((Math.sin(x)+1)*0.5*1000);
System.out.println(usage);
long start = System.currentTimeMillis();
while(System.currentTimeMillis() - start < usage);
try{
Thread.sleep(1000 - usage);
}catch(Exception e){
System.out.print(e);
}
x += 0.1;
}
}
public static void drawSinSpeedup(){
double x = Math.PI / 2;
//加入了刷新时间,可以调控曲线弯曲程度
int flushtime = 5000;
while(true){
long usage = (long)((Math.sin(x)+1)*0.5*flushtime);
System.out.println(usage);
long start = System.currentTimeMillis();
while(System.currentTimeMillis() - start < usage);
try{
Thread.sleep(flushtime - usage);
}catch(Exception e){
System.out.print(e);
}
x += 0.1;
}
}
public static void main(String[] args) throws InterruptedException {
drawLine();
drawSin();
}
}