7

使用有什么好处

Executors.newSingleThreadExecutor().submit(job);

job.run();

wherejobRunnable类的一个实例。

4

3 回答 3

14

字面上写

Executors.newSingleThreadExecutor().submit(job);

毫无意义:这只是错误的做法

new Thread(job).start();

与后者相反,前者将保持线程挂起,直到 Executor Service 完成。

当您将其作为实例/类变量保留并在许多提交的任务中重用它时,使用 Executor Service的优势就显现出来了。完成后,Executor Service 必须正确shutdown

更一般地说,将任务提交到执行器服务与仅运行任务之间的区别在于实现的并发性。这是否会产生任何优势取决于提交的作业:它也可能无用甚至损坏(导致数据竞争、死锁等)。

于 2013-09-25T09:14:00.837 回答
4

区别与new Thread(job).start()和相同job.run()。当您提交作业以供执行时,作业会在执行程序的可用线程之一中运行。调用job.run()就像任何其他方法调用一样,它不在单独的线程中运行,而是在调用线程上运行。

于 2013-09-25T08:56:45.840 回答
1

优点之一是 Executors.newSingleThreadExecutor 重用 Thread 实例来加速其他作业的启动。

于 2013-09-25T09:05:46.833 回答