Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行器服务:SingleThreadExecutor未触发可运行对象_Java_Concurrency_Executorservice - Fatal编程技术网

Java 执行器服务:SingleThreadExecutor未触发可运行对象

Java 执行器服务:SingleThreadExecutor未触发可运行对象,java,concurrency,executorservice,Java,Concurrency,Executorservice,我试图使用Java并发包的ExecutorService SingleThreadExecutor执行一个可运行对象。当我在新的可运行对象上调用execute a命令时,它只是简单地跳过它。i、 e.未调用run()方法 我已经使用调试器浏览了我的代码行,可以看到我的SingleThreadExecutor已经创建,Runnable已经初始化 public class RunnableDemo { public ExecutorService executor; public

我试图使用Java并发包的ExecutorService SingleThreadExecutor执行一个可运行对象。当我在新的可运行对象上调用execute a命令时,它只是简单地跳过它。i、 e.未调用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方法。

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

您必须等待执行人完成以下操作:

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);
}
}

代码不会编译,因为构造函数具有签名
public runnableDemo()
,而类名是
runnableDemo
。也,
MyRunnable
的构造函数接受一个
Sting
而不是
String
。修复上述注释中提到的编译错误后,您的代码工作正常。编辑后工作正常。
newSingleThreadExecutor
返回的
ThreadPoolExecutor
会尽快创建并启动一个非守护进程线程提交任务时(此处使用
执行
)。在该线程停止之前,应用程序无法退出。