繁体   English   中英

以不同的睡眠时间同时运行两个线程

[英]run two threads simultaneously with different sleep times

我有一种情况每分钟运行thread1和每小时运行thread2。 我怎样才能做到这一点。

目前我有一个工作代码,每分钟后运行thread1。

主要方法

    static void main(string args[]){
      orderListner thread1 = new orderListner();
      thread1.start();
    }

线程1

    public static void orderListner extends thread{
      public void run(){
        while(true){
          process();
          thread.sleep(60000);
        }
      }
    }

现在我需要为每小时后运行的结果启动新线程。 我如何同时实现这一点(thread1将连续运行thread2应该每小时启动一次)

我建议您使用ScheduledExecutorService来集中这些任务。


public final class ScheduledExecutorServiceDemo {
    private static final ScheduledExecutorService exec = 
        Executors.newScheduledThreadPool(2);

    public static void main(String[] args){
        // Schedule first task
        exec.scheduleAtFixedRate(new Runnable(){
            @Override
            public void run() {
                // do stuff
            }}, 0, 1, TimeUnit.MINUTES);

        // Schedule second task
        exec.scheduleAtFixedRate(new Runnable(){
            @Override
            public void run() {
                // do stuff
            }}, 0, 1, TimeUnit.HOURS);
    }
}

到目前为止做得好! :)

你可以再做一次。 我的意思是你创建一个代表你的第二个线程的新类(我们可以调用这个类SecondListener )。 它应该看起来像OrderListener ,但是睡眠时间应该改为1小时。

然后你只需修改你的main方法,以便它创建一个SecondListener类的对象,并启动线程,就像你使用OrderListener一样。

如果重要的是SecondListener不运行它直到一小时后才运行,你可以在SecondListener中的进程之前执行sleep。

最后一个关于睡眠时间的小建议:为了便于阅读,将它们表达为方程式。 因此,而不是60000,键入1000 * 60.而不是3600000类型1000 * 60 * 60 :)

使用线程类的更好方法是创建一个实现Runnable而不是扩展线程的对象。 如果您不想创建另一个文件,只需创建一个匿名类。 (尽可能避免使用继承是一种好习惯。)

话虽如此,只需创建一个小时运行的新线程并启动它。 我将使用你的线程方法代替。

    static void main(string args[]){
          orderListner thread1 = new orderListner();
          orderListner2 thread2 = new orderListner2();
          thread1.start;
          thread2.start;
        }

线程1是相同的,线程2是

public static void orderListner2 extends thread{
      void run(){
        while(true){
          process();
          thread.sleep(3600000);
        }
      }
    }

暂无
暂无

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

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