Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中创建线程的肮脏方式_Java_Multithreading - Fatal编程技术网

Java中创建线程的肮脏方式

Java中创建线程的肮脏方式,java,multithreading,Java,Multithreading,我最近开始深入研究Java中的多线程。在探索过程中,我发现有两种快速而肮脏的方法可以在Java中“动态”创建线程。以下是一个例子: public static void main(String[] args) { System.out.println("Thread: " + Thread.currentThread().getName()); new Thread() { public void run() { System.out.p

我最近开始深入研究Java中的多线程。在探索过程中,我发现有两种快速而肮脏的方法可以在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(){
  • 我只是想问一下这两种方法是否都是正确的?除了实现可运行接口的差异之外,还有什么区别吗?

    两种方法都是可以接受的(我认为这两种方法都不是“脏的”)。第一个是不太详细的,我更喜欢在这样的小情况下使用。如果您正在扩展线程,那么您也可以跳过
    Thread.currentThread()

    然而,在任何非平凡的情况下(即,如果线程执行的不仅仅是几次打印),通常的规则适用于第二种方法

    如果您使用的是Java 8,您甚至可以利用
    Runnable
    是一个功能性接口这一事实:

    new Thread(() -> {
        System.out.println("Thread: " + Thread.currentThread().getName());
        System.out.println("hello");
    }).start()
    

    最后一点注意:我现在很少使用线程。每当我使用线程时,我都倾向于使用ExecutorServices来重写它。

    你指的是什么“脏”的概念?@ChrisMartin“脏”在线程中与任何类都没有关联。我应该改为“内联”吗?我相信你要找的词是“匿名”的.相关阅读:你说的不那么详细是什么意思?第一个已经被官方禁止了,原因是暴露于所有
    线程
    类的内部,这可能会导致对程序员甚至都不知道的成员意外地、不直观地参与鲜为人知的Java命名解析规则l这背后的原则是喜欢组合而不是继承。@Anurag,我所说的不太详细是指代码更少(因为您省略了
    new Runnable()
    部分)。@MarkoTopolnik在组合方面有一个很好的观点。稍微重新阐述一下我的答案。
    new Thread(() -> {
        System.out.println("Thread: " + Thread.currentThread().getName());
        System.out.println("hello");
    }).start()