Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 如何独立于主线程运行Executors newSingleThreadExecutor_Java_Multithreading_Executorservice - Fatal编程技术网

Java 如何独立于主线程运行Executors newSingleThreadExecutor

Java 如何独立于主线程运行Executors newSingleThreadExecutor,java,multithreading,executorservice,Java,Multithreading,Executorservice,我需要独立于主线程执行一段代码,我通过 new Thread(()->{ someBigWork() }).start(); 这很好,但我想通过执行器newSingleThreadExecutor实现这一点 我尝试了以下代码 public static void main() { try{ // some my code should run in main Thread ExecutorService executorService = Executors.newSi

我需要独立于主线程执行一段代码,我通过

new Thread(()->{
someBigWork()
}).start();
这很好,但我想通过执行器newSingleThreadExecutor实现这一点

我尝试了以下代码

public static void main()  
{
  
try{  
// some my code should run in main Thread  
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(() -> someBigWork());    
// some my code should run in main Thread  
}catch(Expection e){  
// some handeling code  
}finally{  
executorService.shutdown();
}  
我看到的是主线程只有在someBigWork()执行完成后才退出。 我通过cmd行运行这段代码,我添加了一些日志,在Spring日志之后程序退出(我想,主线程是否正在等待someBigWork()完成)
我想独立运行someBigWork()。
我错过什么了吗?

如果我错了,请纠正我。

代码中的主线程在someBigWork()之后意外退出。如果将Thread.sleep(delayinmillides)添加到someBigWork()中,并在main()和someBigWork()的末尾使用线程名称进行日志记录


然后您将看到它们独立运行。

是的,我正在使用Thread.sleep(delayinmillizes)进入someBigWork()并记录测试。因此,如果我删除Thread.sleep(delayinmillizes)和slf4j记录器,它是否解决了问题,如果我wrong@LMKIND,我看不出任何问题。main()和someBigWork()都在不同的线程中运行。要验证它,可以打印Thread.currentThread().getName()。如果您想看到main()在someBigWork()之前是如何完成的,只需在someBigWork()中添加一些更长的睡眠时间。“我想通过Executors newSingleThreadExecutor实现这一点”-为什么?这有什么原因吗?没有原因,只是想使用Executor执行器用于小任务,大任务最好在专用线程上执行。
System.out.println(Thread.currentThread().getName() + ": end of myMethodName()");