Java 执行器服务:SingleThreadExecutor未触发可运行对象
我试图使用Java并发包的ExecutorService SingleThreadExecutor执行一个可运行对象。当我在新的可运行对象上调用execute a命令时,它只是简单地跳过它。i、 e.未调用run()方法 我已经使用调试器浏览了我的代码行,可以看到我的SingleThreadExecutor已经创建,Runnable已经初始化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
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
会尽快创建并启动一个非守护进程线程提交任务时(此处使用执行)。在该线程停止之前,应用程序无法退出。