简体   繁体   English

Java中带有线程的计时器

[英]Timer in java with Threads

I want to print this line: 我要打印此行:

System.out.println(Runtime.getRuntime().freeMemory());

every second. 每一秒。 How to do it? 怎么做?

public class Hilo implements Runnable{    

    Thread t;
    String nombre;
    public  Hilo() {
         t = new Thread(this,"Hilo1");
         t.start();
    }

    @Override
    public void run() {
        System.out.println(Runtime.getRuntime().freeMemory());
    }
}

Use a java.util.Timer object. 使用java.util.Timer对象。

A facility for threads to schedule tasks for future execution in a background thread. 线程用于安排任务以在将来的后台线程中执行的工具。 Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals. 可以安排任务一次执行或定期执行重复任务。

timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println(Runtime.getRuntime().freeMemory());
    }
}, 0, 1000);

Another way to do it 另一种方式

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();

ses.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println(Runtime.getRuntime().freeMemory());
    }
}, 0, 1, TimeUnit.SECONDS);

ses.shutdown();

Differences between java.util.timer and ScheduledExecutorService java.util.timerScheduledExecutorService之间的区别

  1. ScheduledThreadPoolExecutor are not sensitive to changes in the system clock but Timer is. ScheduledThreadPoolExecutor对系统时钟的变化不敏感,但对Timer敏感。

  2. Timer has only one execution thread, so long-running task can delay other tasks. 计时器只有一个执行线程,因此长时间运行的任务可能会延迟其他任务。 ScheduledThreadPoolExecutor can be configured with any number of threads ScheduledThreadPoolExecutor可以配置任意数量的线程

By using below code you can print that want after every second 通过使用以下代码,您可以每秒打印一次

        timer.schedule(new TimerTask() {
           @Override
           public void run() {
                System.out.println(Runtime.getRuntime().freeMemory());
               }
              }, 0, 1000);

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM