在Java中创建线程的脏方法

时间:2014-11-30 10:55:25

标签: java multithreading

我最近开始深入研究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();
}
  1. 第一个是以new Thread() {
  2. 开头的那个
  3. 第二个是以new Thread(new Runnable() {
  4. 开头的

    我只想问两种方法是否正确?除了实施可运行接口 v / s扩展线程类之间的差异之外的任何差异?

1 个答案:

答案 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重写它。