每隔 X 秒打印“ hello world”

最近我一直在使用大数字的循环来打印 Hello World:

int counter = 0;


while(true) {
//loop for ~5 seconds
for(int i = 0; i < 2147483647 ; i++) {
//another loop because it's 2012 and PCs have gotten considerably faster :)
for(int j = 0; j < 2147483647 ; j++){ ... }
}
System.out.println(counter + ". Hello World!");
counter++;
}

我知道这是一种非常愚蠢的方法,但是我从来没有在 Java 中使用过任何计时器库。如何修改以上打印每说3秒?

309681 次浏览

最简单的方法是将主线程设置为睡眠3000毫秒(3秒) :

for(int i = 0; i< 10; i++) {
try {
//sending the actual Thread of execution to sleep X milliseconds
Thread.sleep(3000);
} catch(InterruptedException ie) {}
System.out.println("Hello world!");
}

这将使线程停止至少 X 毫秒。线程可以睡更多的时间,但这取决于 JVM。唯一可以保证的是线程将至少睡眠那些毫秒。看看 Thread#sleep的文档:

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数 视乎系统定时器及调度器的准确与精密而定

加入 Thread.sleep

try {
Thread.sleep(3000);
} catch(InterruptedException ie) {}

您可以在 for 循环中使用 Thread.sleep(3000)

注意: 这将需要一个 try/catch块。

如果你想做一个周期性的任务,使用 ScheduledExecutorService。特别是 ScheduleAtFixedRate

密码:

Runnable helloRunnable = new Runnable() {
public void run() {
System.out.println("Hello world");
}
};


ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(helloRunnable, 0, 3, TimeUnit.SECONDS);

您还可以看一下 TimerTimerTask类,您可以使用它们来安排任务以每隔 n秒运行一次。

您需要一个扩展 TimerTask并重写 public void run()方法的类,每次将该类的实例传递给 timer.schedule()方法时都将执行该方法。.

下面是一个示例,它每5秒打印一次 Hello World:-

class SayHello extends TimerTask {
public void run() {
System.out.println("Hello World!");
}
}


// And From your main() method or any other method
Timer timer = new Timer();
timer.schedule(new SayHello(), 0, 5000);

使用 java.util.TimerTimer#schedule(TimerTask,delay,period)方法将有助于您。

public class RemindTask extends TimerTask {
public void run() {
System.out.println(" Hello World!");
}
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new RemindTask(), 3000,3000);
}
}

就像他说的,你可以随心所欲地处理异常,但是 Sleep (毫秒) ; 是最好的选择。

public static void main(String[] args) throws InterruptedException {

对于小型应用程序,可以像 Rohit 提到的那样使用 Timer 和 TimerTask,但是在 Web 应用程序中,我会使用 石英调度器来调度作业并执行这种定期作业。

有关 Quartz 调度,请参见 教程

我用计时器算出来的,希望能有帮助。我使用了来自 java.util.TimerTimerTask的来自同一软件包的计时器。见下文:

TimerTask task = new TimerTask() {


@Override
public void run() {
System.out.println("Hello World");
}
};


Timer timer = new Timer();
timer.schedule(task, new Date(), 3000);
public class HelloWorld extends TimerTask{


public void run() {


System.out.println("Hello World");
}
}




public class PrintHelloWorld {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new HelloWorld(), 0, 5000);


while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("InterruptedException Exception" + e.getMessage());
}
}
}
}

创建无限循环并配置调度程序任务。

public class TimeDelay{
public static void main(String args[]) {
try {
while (true) {
System.out.println(new String("Hello world"));
Thread.sleep(3 * 1000); // every 3 seconds
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

这是在 java 中使用 thread 的简单方法:

for(int i = 0; i< 10; i++) {
try {
//sending the actual Thread of execution to sleep X milliseconds
Thread.sleep(3000);
} catch(Exception e) {
System.out.println("Exception : "+e.getMessage());
}
System.out.println("Hello world!");
}

下面是在线程构造器中使用 Runnable 接口的另一种简单方法

public class Demo {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {


@Override
public void run() {
for(int i = 0; i < 5; i++){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread T1 : "+i);
}
}
});


Thread t2 = new Thread(new Runnable() {


@Override
public void run() {
for(int i = 0; i < 5; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread T2 : "+i);
}
}
});


Thread t3 = new Thread(new Runnable() {


@Override
public void run() {
for(int i = 0; i < 5; i++){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread T3 : "+i);
}
}
});


t1.start();
t2.start();
t3.start();
}
}

试试这样做:

Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Hello World");
}
}, 0, 5000);

这段代码将每隔 五千毫秒(5秒)运行 print 到控制台 你好,世界。 要了解更多信息,请阅读 < a href = “ https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html”> https://docs.oracle.com/javase/1.5.0/docs/api/java/util/timer.html