Executor Service:SingleThreadExecutor不会触发runnable对象

问题描述 投票:-1回答:1

我正在尝试使用Java并发包的ExecutorService SingleThreadExecutor执行一个可运行的对象。当我在新的Runnable对象上调用execute一个命令时,它只是跨过它。即不调用run()方法。

我已经使用调试器逐步完成了我的代码行,并且可以看到我的SingleThreadExecutor已经创建并且我的Runnable已初始化。

public class RunnableDemo {

    public ExecutorService executor;

    public RunnableDemo () {
        this.executor = Executors.newSingleThreadExecutor();
    }

    public void start(){
       executor.execute(new MyRunnable("Hello World"));
    }

   public static void main(String[] args){
        RunnableDemo app = new RunnableDemo();
        app.start();
    }
}

public class MyRunnable implements Runnable {
   private String strToPrint;

   public MyRunnable(String parameter) {
       this.strToPrint = parameter;
   }

   public void run() {
      System.out.println(strToPrint);
   }
}

并且可能是不言自明的,但在这种情况下,我希望看到“Hello World”打印到屏幕上。但是,在创建runnable后似乎不会调用execute / run方法。

java concurrency executorservice
1个回答
-1
投票

您的程序在执行程序启动任务之前终止。

你必须等待执行者完成这样的事情:

public class RunnableDemo {

public ExecutorService executor;

public RunnableDemo () {
    this.executor = Executors.newSingleThreadExecutor();
}

public void start(){
   executor.execute(new MyRunnable("Hello World"));
}

public void awaitTermination(){
  try {
        service.awaitTermination(10, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static void main(String[] args){
    RunnableDemo app = new RunnableDemo();
    app.start();
    app.awaitTermination();
}
}

public class MyRunnable implements Runnable {
private String strToPrint;

public MyRunnable(String parameter) {
   this.strToPrint = parameter;
}

public void run() {
  System.out.println(strToPrint);
}
}
© www.soinside.com 2019 - 2024. All rights reserved.