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()");