我最近开始深入研究Java中的多线程。在探索事物时,我发现有两种快速而肮脏的方法来创建线程"在旅途中#34;在Java中。这是一个例子:
public static void main(String[] args) {
System.out.println("Thread: " + Thread.currentThread().getName());
new Thread() {
public void run() {
System.out.println("Thread: "
+ Thread.currentThread().getName());
System.out.println("hello");
}
}.start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread: "
+ Thread.currentThread().getName());
System.out.println("hello");
}
}).start();
}
new Thread() {
new Thread(new Runnable() {
我只想问两种方法是否正确?除了实施可运行接口 v / s扩展线程类之间的差异之外的任何差异?
答案 0 :(得分:7)
两种方式都是可以接受的(在我看来,这两种方式都不是“脏”)。第一个是不那么冗长,而且我喜欢这样一个像这样的小事。如果您正在扩展Thread,那么您也可以跳过Thread.currentThread()
:
new Thread() {
public void run() {
System.out.println("Thread: " + getName());
System.out.println("hello");
}
}.start();
然而,在任何非平凡的情况下(即如果线程不只是打印几张),"favor composition over inheritance"的通常规则适用于提倡第二种方法。
如果您使用的是Java 8,您甚至可以利用Runnable
是一个功能界面的事实:
new Thread(() -> {
System.out.println("Thread: " + Thread.currentThread().getName());
System.out.println("hello");
}).start()
最后一点:这些天我很少使用线程。每当我这样做时,我倾向于使用ExecutorServices重写它。