Jed*_*Pie 9 java multithreading
我需要找到一种从静态调用中分离线程的方法,而不是等待线程完成.基本上,一种"即发即忘"的方法.有人能为我提供一个如何实现这一目标的简单例子吗?
Pau*_*ams 27
Thread t = new Thread(new YourClassThatImplementsRunnable());
t.start();
// JDK 8
new Thread(() -> methodYouWantToRun()).start();
Run Code Online (Sandbox Code Playgroud)
如果它是一个长期存在的线程,它与你的应用程序本身具有相似的生命周期,并且将花费大量时间等待其他线程:
new Thread(new yourLongRunningProcessThatImplementsRunnable()).start();
Run Code Online (Sandbox Code Playgroud)
如果它是一个短命的,受CPU限制的任务:
ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors());
es.submit(new yourTaskThatImplementsRunnable());
Run Code Online (Sandbox Code Playgroud)
虽然,在大多数情况下,你会提交一些相同的任务ExecutorService.
public static void foo() {
new Thread() {
public void run() {
//do something here....
}
}.start();
}
Run Code Online (Sandbox Code Playgroud)
根据任务的性质,可能会有不同的方式:
(1)正如许多人所提到的,偶然任务的一种常见方法是简单地构造一个线程并调用它的start()方法.
(2)请记住,如果后台线程没有停止,那么默认情况下它会阻止程序在其他线程完成时关闭.因此,您可能希望在线程上调用setDaemon(true),以便它不具有此行为.(另一方面,在基于GUI的应用程序中,您通常最终只是调用System.exit(),理想情况下,您可以通过一种干净的关闭方式来运行长时间运行的任务.)
(3)如果你经常有短暂的任务 "发射并忘记",那么考虑使用Java 5以后的Executors框架.
| 归档时间: |
|
| 查看次数: |
12219 次 |
| 最近记录: |