我想在java中编写一个计时器,它将执行以下操作:当程序启动时,启动timer1,它将在45分钟后停止,同时启动第二个计时器,它将在15分钟后停止.此时第一个计时器将再次启动,并重复上述循环,直到程序退出第一个计时器:45分钟(我可以使用计算机的时间)第二个计时器:15分钟(暂停时间)第一个计时器:45分钟(时间)我可以使用电脑)第二个计时器:15分钟(暂停时间)第一个计时器:45分钟(我可以使用计算机的时间)第二个计时器:15分钟(暂停时间)
我不知道如何使用线程和计时器(utils,swing)所以我试图使用while(true)但cpu上升.这是我目前的代码
static int getMinute(){
Calendar cal=Calendar.getInstance();
int minute=cal.getTime().getMinutes();
return minute;
}
public static Runnable clockf(){
if (endTime>=60){
endTime=endTime-60;}
System.out.println(startTime);
System.out.println(currentTime);
System.out.println(endTime);
if(currentTime==endTime){
pauseStart=getMinute();
currentTime=getMinute();
pauseEnd=pauseStart+15;
if(currentTime==pauseEnd){
pauseStart=0;
pauseEnd=0;
startTime=getMinute();
currentTime=getMinute();
endTime=startTime+45;
}
}
else{
update();
}
return null;
Run Code Online (Sandbox Code Playgroud)
}
private static void update() {
currentTime=getMinute();
System.out.println(currentTime);
}
public static void main(String[] args) {
startTime=getMinute();
currentTime=getMinute();
endTime=startTime+45;
Thread t=new Thread(clockf());
t.setDaemon(true);
t.start();
try {
Thread.currentThread().sleep(1000);//60000
} catch (InterruptedException e) {
System.err.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
但它并不好.有没有办法让clockf方法只运行一次/分钟?或任何其他方式使该计时器运行?
即使我没有完全理解你要做什么, Timer和TimerTask应该为你做到这一点.以下代码必须改进一点才能运行,但希望显示原理:
long minute = 1000*60;
Timer timer1 = new Timer();
long delay1 = 45*minute;
Timer timer2 = new Timer();
long delay2 = 15*minute;
TimerTask tt1;
TimerTask tt2;
...
tt1 = new TimerTask()
{
public void run()
{
//do something and:
timer2.schedule(tt2, delay2);
}
};
tt2 = new TimerTask()
{
public void run()
{
//do something and:
timer1.schedule(tt1, delay1);
}
};
timer1.schedule(tt1, delay1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7953 次 |
| 最近记录: |