好标题说,它Executors.newSingleThreadExecutor().execute(command)和之间有什么区别new Thread(command).start();
Joh*_*int 21
一个明显的区别是,new Thread(someRunnable).start();当runnable完成后运行时,线程将静静地死亡.
Executor会一直持续到你关闭它为止.如此运行Executors.newSingleThreadExecutor().execute(command)当您认为您的应用程序或JVM可能已完成时,Executor可能仍在后台线程中运行.
Pet*_*rey 13
随着Executor.execute,如果一个Error或被RuntimeException抛出Executor它将被静默吞噬,而new Thread()将打印它System.err.
可能存在很多差异,但我将向您展示一个我认为理解非常重要的差异:
\n\npublic void sendEventSingleThreadExecutor(Event e){\n Executor.singleThreadExecutor().execute(()->{//send the event here})\n}\nRun Code Online (Sandbox Code Playgroud)\n\n现在,即使您调用sendEventSingleThreadExecutor 方法10 次,它也只会使用单个线程来发送它们。它不会每次都创建一个新线程。这意味着事件将按顺序或同步发送!\n您可以从这里阅读更多信息:
\n\n现在看下面带有新线程的示例
\n\npublic void sendEventThread(Event e){\n Thread(//send the event here).start();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果调用它 10 次,它将创建10 个新线程。这意味着,执行将是异步的!这可能很危险,它可以创建很多线程,具体取决于您调用 sendEventThread 函数的次数。
\n\n请注意,代码仅用于演示目的,可能存在语法错误!\n如果您发现此处的描述有任何错误,我将很乐意予以纠正。
\n\n更多信息请点击这里
\n\n\n\n新的单线程执行器。单线程执行器创建一个\n工作线程来处理任务,如果它意外终止,则替换它。\n保证任务按照任务队列规定的\n顺序(先进先出、后进先出、优先级顺序)顺序处理。 ).[4]
\n\n[4] 单线程执行器还提供足够的内部同步,以保证任务进行的任何内存写入对后续任务可见;这意味着对象可以安全地限制在\xe2\x80\x9c任务线程\xe2\x80\x9d中,即使该线程可能不时被另一个线程替换。
\n
| 归档时间: |
|
| 查看次数: |
12935 次 |
| 最近记录: |