如何在java中使用计时器而不使用线程?
如果不使用如何在java中使用计时器而不使用线程?,java,wait,Java,Wait,如果不使用Thread.sleep,如何让java程序等待X秒 public class newClass{ public static void main(String[] args){ for(int i = 0; i < 10; i++){ //Wait X second System.out.println("Hello"); } } } 公共类newCl
Thread.sleep
,如何让java程序等待X秒
public class newClass{
public static void main(String[] args){
for(int i = 0; i < 10; i++){
//Wait X second
System.out.println("Hello");
}
}
}
公共类newClass{
公共静态void main(字符串[]args){
对于(int i=0;i<10;i++){
//等X秒
System.out.println(“你好”);
}
}
}
谢谢你的帮助
我需要程序在计数时不会冻结这是一种糟糕的方法,但您可以使用以下方法:
public class newClass{
public static void main(String[] args){
int X = 5;
for(int i = 0; i < 10; i++){
long s = System.nanoTime();
while( (System.nanoTime() - s) / 1000000000 < X);
System.out.println("Hello");
}
}
}
您真正想要的是多线程实现。这将允许您继续与应用程序的一个区域交互,同时等待另一个区域完成处理 编辑
好的,在评论中进一步澄清之后,听起来这不是你想要的。也许您可以在HashMap中注册每个孩子的开始时间。然后监视地图,看时间到了。 < P>如果你的问题是你不想让程序冻结,考虑使用线程。此示例可能与您想要实现的类似:。似乎您希望程序启动,并且在X时间过后在输出流上打印“Hello”
这两个选项都将给您提供完全相同的结果,尽管选项2是首选选项,因为您允许CPU在主线程睡眠时执行其他操作,而且使用选项1会使您对程序的意图不那么清楚。您可以使用Java的Timer和TimerTask类来实现这一点
import java.util.Timer;
import java.util.TimerTask;
public class newClass extends TimerTask{
int i = 10;
static Timer timer;
@Override
public void run(){
System.out.println("hello");
i--;
if (i == 0)
timer.cancel();
}
public static void main(String[] args){
TimerTask timerTask = new newClass();
timer = new Timer(false);
timer.scheduleAtFixedRate(timerTask, 0, 5 * 1000);
}
}
定时器在后台自己的线程上工作,所以它不会冻结程序的其余部分
wait()。那么,你的问题是什么?你是在问忙着等待吗?你认为等待和睡觉之间的区别是什么?等待/睡觉之间的区别是什么?这就是我的意思!你能给我解释一下吗?在每个while循环步骤中,该代码控制当前时间并以秒为单位计算经过的时间。这是不好的,因为它会使用CPU周期,不像sleep()
或wait()
命令,所以这只是一个坏把戏。不,等等,它仍然会使我的软件冻结:(我怎么能使用wait()?如果你不想让你的程序冻结,你应该使用像ian提到的多线程方法。我怎么能让它写10次“Hello”?您能更改代码吗?TimerTask应该以固定的间隔重复,直到您调用cancel(),所以此代码应该重复10次。它不是这样工作的吗?不,我不知道为什么,因为我从未使用过这样的代码OK,只需将行“timer=new timer(true)”更改为“timer=new timer(false)”告诉我这是否有效是的它有效!!你能给我解释一下代码吗?加上注释也很好:)
import java.util.Timer;
import java.util.TimerTask;
public class newClass extends TimerTask{
int i = 10;
static Timer timer;
@Override
public void run(){
System.out.println("hello");
i--;
if (i == 0)
timer.cancel();
}
public static void main(String[] args){
TimerTask timerTask = new newClass();
timer = new Timer(false);
timer.scheduleAtFixedRate(timerTask, 0, 5 * 1000);
}
}