2016-01-22 98 views
0

有人可以解释这段代码做了什么吗? new Thread(new X()).start();Java多线程:如何使用Runnable接口创建线程?

休息代码:

class X implements Runnable { 
    X() {} 
    } 
    public static void main(String[] arg) { 
     new Thread(new X()).start(); 
    } 
} 
+0

产生一个新的线程,其中X的一个实例运行。如果您不知道线程是什么,我建议您首先阅读流程的基础知识,而不是语言特定的实现。 –

+3

这不会编译:错误的大括号和X不执行运行方法。 – Puce

回答

6

这是一个非常简单的例子,它展示了如何创建一个新的线程并运行它。当你用Java创建新的线程时,你可以给他们做一些事情 - 一个“Runnable”。

class X implements Runnable 

此接口只有一个方法 - run()的。所以你创建了一个新的线程,在其构造函数中有一个可运行的线程。

new Thread(new X()) 

一旦你创建了一个新的线程,你必须与的start()方法启动它。这是当它调用runnable的run()方法。在你的榜样,这个刚刚被线程建成后链上:现在

new Thread(new X()).start(); 

,这个例子是在X类实际上并没有实现运行方法不同寻常。但通常情况下,还有额外的位,所以你的例子是这样的:

class X implements Runnable { 
    public void run() { 
     System.out.println("This is running on a different thread!"); 
    } 

    public static void main(String[] arg) { 
     new Thread(new X()).start(); 
    } 
} 
0

你并不需要定义构造函数,如果是空白的,首先。如果你没有定义一个,它会自动变为空白。其次,你可以简单地做一个匿名类的定义,我将在第二个解释。在这种情况下,该方法不是主要的,它运行。您也可以使用匿名类定义来定义一个线程对象。

new Thread() { 
    @Override 
    public void run() { 
     //Code here 
    } 
}.start(); 

匿名类的定义允许您定义和实例,从而无论是在不实际创建类的同时扩展/实现其他类的类。另外,请注意X.main()是静态的,这意味着X的任何实例都不会有该方法。你想覆盖运行和调用开始。开始只是一个调用在另一个线程中运行的方法。请注意,您无法启动两次线程。

+0

http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread –

0

每个线程对象都有一个run()方法。如果你调用线程对象的start()方法,那么它将执行run()。

唯一的区别是它将被分开/并行执行并且不会在现有的操作顺序中。

0

您可以通过两种方式创建线程:一个通过扩展Thread和其他通过实现Runnable接口。

如果您没有扩展Thread类,那么您的类对象将不会被视为线程对象。所以你必须显式地创建Thread类对象。

Thread class将在构造函数中将Runnable作为参数。

你是通过你的class X实现RunnableThread构造函数,以便您的类run()方法将start()线程的方法来执行的对象。

您可以通过两种不同的方式创建线程。看看有关的oracle文档thread creation

创建Thread实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:

  1. Provide a Runnable object.Runnable接口定义了一个方法,运行,意味着包含线程执行的代码。 The Runnable object is passed to the Thread constructor

    public class HelloRunnable implements Runnable { 
    
        public void run() { 
         System.out.println("Hello from a thread!"); 
        } 
    
        public static void main(String args[]) { 
         (new Thread(new HelloRunnable())).start(); 
        } 
    } 
    
  2. Subclass Thread。 Thread类本身实现Runnable,尽管它的run方法什么也不做。应用程序可以继承Thread,提供它自己的实现运行

    public class HelloThread extends Thread { 
    
        public void run() { 
         System.out.println("Hello from a thread!"); 
        } 
    
        public static void main(String args[]) { 
         (new HelloThread()).start(); 
        } 
    
    } 
    
相关问题