如何启动匿名线程类

我有以下代码片段:

public class A { public static void main(String[] arg) { new Thread() { public void run() { System.out.println("blah"); } }; } } 

在这里,如何在不创build线程类的实例的情况下为线程调用start()方法?

你已经创build了一个Thread类的实例 – 你只是没有做任何事情。 你甚至可以在不使用本地variables的情况下调用start()

 new Thread() { public void run() { System.out.println("blah"); } }.start(); 

…但我个人通常将它分配给一个局部variables,做任何你想要的(例如设置名称等),然后启动它:

 Thread t = new Thread() { public void run() { System.out.println("blah"); } }; t.start(); 

由于匿名类扩展了给定的类,所以可以将它们存储在一个variables中。

例如。

 Thread t = new Thread() { public void run() { System.out.println("blah"); } }; t.start(); 

或者,您可以在立即创build的对象上调用start方法。

 new Thread() { public void run() { System.out.println("blah"); } }.start(); // similar to new Thread().start(); 

虽然我个人总是build议创build一个Runnable的匿名实例,而不是Thread,因为如果你不小心把方法签名弄错了,编译器会发出警告(对于一个匿名类,无论如何它会提醒你,因为匿名类不能定义新的非私人方法)。

例如

 new Thread(new Runnable() { @Override public void run() { System.out.println("blah"); } }).start(); 

不完全确定这是你在问什么,但你可以做一些事情:

 new Thread() { public void run() { System.out.println("blah"); } }.start(); 

注意匿名类最后的start()方法。 您创build线程对象,但您需要启动它实际上获得另一个正在运行的线程。

比创build一个匿名的Thread类更好的是创build一个匿名的Runnable类:

 new Thread(new Runnable() { public void run() { System.out.println("blah"); } }).start(); 

而是重写Threadrun()方法,注入一个由新线程运行的目标Runnable 。 这是一个更好的模式。

只需调用start()

 new Thread() { public void run() { System.out.println("blah"); } }.start(); 

整个newexpression式是一个对象引用,所以方法可以被调用:

 public class A { public static void main(String[] arg) { new Thread() { public void run() { System.out.println("blah"); } }.start(); } }