如何启动匿名线程类
我有以下代码片段:
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();
而是重写Thread
的run()
方法,注入一个由新线程运行的目标Runnable
。 这是一个更好的模式。
只需调用start()
new Thread() { public void run() { System.out.println("blah"); } }.start();
整个new
expression式是一个对象引用,所以方法可以被调用:
public class A { public static void main(String[] arg) { new Thread() { public void run() { System.out.println("blah"); } }.start(); } }