Java 简明教程

Java - Naming a Thread with Examples

Name a Thread while Implementing a Runnable Interface

如果你的类旨在作为线程执行,并且正在实现 Runnable 接口。你需要使用以下构造函数实例化 Thread 对象 −

If your class is intended to be executed as a thread and is implementing a Runnable interface. You will need to instantiate a Thread object using the following constructor −

Thread(Runnable threadObj, String threadName);

其中,threadObj 是实现 Runnable 接口的类的实例,threadName 是赋予新线程的名称。

Where, threadObj is an instance of a class that implements the Runnable interface and threadName is the name given to the new thread.

一旦创建了 Thread 对象,就可以通过调用 start() 方法来启动它,它执行对 run( ) 方法的调用。以下是 start() 方法的简单语法 -

Once a Thread object is created, you can start it by calling start() method, which executes a call to run( ) method. Following is a simple syntax of start() method −

void start();

Example

在本示例中,我们通过实现 Runnable 接口来创建一个类 RunnableDemo。RunnableDemo 类具有 run() 方法实现。在 main 类 TestThread 中,我们创建了 RunnableDemo 对象,并且使用这些对象我们创建了两个 Thread 对象。在每个线程对象上调用 Thread.start() 方法时,线程开始处理并且执行程序。

In this example, we’re creating a class RunnableDemo by implementing Runnable interface. RunnableDemo class has run() method implementation. In main class TestThread, we’ve created the RunnableDemo objects and using those objects we’ve created two Thread objects. When Thread.start() method is called on each thread objects, threads start processing and program is executed.

package com.tutorialspoint;
class RunnableDemo implements Runnable {
   private String threadName;
   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Thread: " + threadName + ", " + "State: New");
   }
   public void run() {
      System.out.println("Thread: " + threadName + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         System.out.println("Thread: " + threadName + ", " + i);
      }
      System.out.println("Thread: " + threadName + ", " + "State: Dead");
   }
}
public class TestThread {
   public static void main(String args[]) {
	  RunnableDemo runnableDemo1 = new RunnableDemo( "Thread-1");
	  RunnableDemo runnableDemo2 = new RunnableDemo( "Thread-2");

	  Thread thread1 = new Thread(runnableDemo1);
	  Thread thread2 = new Thread(runnableDemo2);

	  thread1.start();
	  thread2.start();
   }
}

Output

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

Naming a Thread while extending a Thread Class

创建线程的第二种方法是创建一个扩展 Thread 类的类。此方法提供了更多的灵活性,可以处理使用 Thread 类中的可用方法创建的多个线程。为了给线程命名,我们需要使用 name 调用超类 Thread 构造函数。

The second way to create a thread is to create a new class that extends Thread class. This approach provides more flexibility in handling multiple threads created using available methods in Thread class. In order to name the thread, we need to call the super class Thread constructor with name.

class ThreadDemo extends Thread {
   ThreadDemo( String name) {
      super(name);
      ...
   }
...
}

Example 1

下面是对继承 Thread 的程序的重写 - 在本示例中,我们创建了一个扩展 Thread 类的 ThreadDemo 类。我们在 constructor() 方法中调用 super(name) 为线程分配一个名称,并且调用 super.start() 来启动线程处理。

Here is the preceding program rewritten to extend the Thread − In this example, we’ve created a ThreadDemo class which extends Thread class. We’re calling super(name) in constructor() method to assign a name to the thread and called super.start() to start the thread processing.

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      System.out.println("Thread: " + name + ", " + "State: New");
   }
   public void run() {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i);
      }
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }

   public void start () {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}
public class TestThread {
   public static void main(String args[]) {
	  ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	  ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	  thread1.start();
	  thread2.start();
   }
}

Output

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-2, State: Running
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

Example 2

在此示例中,我们创建了一个扩展了 Thread 类的 ThreadDemo 类。我们没有给 Thread 传递任何名称,它将打印由系统分配给该线程的默认名称。

In this example, we’ve created a ThreadDemo class which extends Thread class. We’re not passing any name to the Thread and it will print the default names assigned to the threads by the system.

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( ) {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: New");
   }
   public void run() {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i);
      }
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   public void start () {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

public class TestThread {
   public static void main(String args[]) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
   }
}

Output

Thread: main, State: New
Thread: main, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-0, State: Running
Thread: Thread-0, 4
Thread: Thread-0, 3
Thread: Thread-1, State: Running
Thread: Thread-0, 2
Thread: Thread-1, 4
Thread: Thread-0, 1
Thread: Thread-1, 3
Thread: Thread-0, State: Dead
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-1, State: Dead