如何启动匿名线程类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何启动匿名线程类相关的知识,希望对你有一定的参考价值。
我有以下代码片段:
public class A {
public static void main(String[] arg) {
new Thread() {
public void run() {
System.out.println("blah");
}
};
}
}
在这里,如何在不创建线程类实例的情况下为线程调用start()
方法?
答案
不完全确定这是你要问的,但你可以这样做:
new Thread() {
public void run() {
System.out.println("blah");
}
}.start();
注意匿名类末尾的start()
方法。您创建线程对象但您需要启动它以实际获得另一个正在运行的线程。
比创建一个匿名的Thread
类更好的是创建一个匿名的Runnable
类:
new Thread(new Runnable() {
public void run() {
System.out.println("blah");
}
}).start();
而是覆盖run()
中的Thread
方法,你注入一个目标Runnable
由新线程运行。这是一个更好的模式。
另一答案
只需调用start()
new Thread()
{
public void run() {
System.out.println("blah");
}
}.start();
另一答案
整个new
表达式是一个对象引用,因此可以在其上调用方法:
public class A {
public static void main(String[] arg)
{
new Thread()
{
public void run() {
System.out.println("blah");
}
}.start();
}
}
另一答案
添加:现在您可以使用lambda来简化语法。要求:Java 8+
public class A {
public static void main(String[] arg)
{
Thread th = new Thread(() -> {System.out.println("blah");});
th.start();
}
}
另一答案
我很惊讶我没有看到Java的Executor框架提到这个问题的答案。 Executor框架的主要卖点之一是你没有处理低级线程。相反,你正在处理ExecutorServices的更高层次的抽象。因此,不要手动启动线程,只需执行包装Runnable的执行程序。使用单线程执行程序,您创建的Runnable
实例将在内部被包装并作为线程执行。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
// ...
ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
try {
threadExecutor.execute(
new Runnable() {
@Override
public void run() {
System.out.println("blah");
}
}
);
} finally {
threadExecutor.shutdownNow();
}
为方便起见,请参阅code on JDoodle。
另一答案
将此留在这里以供将来参考,但它也是一个答案。
new Thread(() - > whatever())。start();
以上是关于如何启动匿名线程类的主要内容,如果未能解决你的问题,请参考以下文章