实现Runnable接口时命名线程

如果您的类打算作为线程执行并且实现Runnable接口。您需要使用以下构造函数实例化 Thread 对象 

Thread(Runnable threadObj, String threadName); 

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

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

void start(); 

示例

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

package com.yxjc123;
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();
   }
} 

输出

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 

继承Thread类命名线程

创建线程的第二种方法是创建一个继承Thread类的新类。这种方法在处理使用 Thread 类中的可用方法创建的多个线程时提供了更大的灵活性。为了命名线程,我们需要使用名称调用超类 Thread 构造函数。

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

示例 1

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

package com.yxjc123;
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();
   }
} 

输出

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 

示例 2

在此示例中,我们创建了一个继承 Thread 类的 ThreadDemo 类。我们不会向线程传递任何名称,它将打印系统分配给线程的默认名称。

package com.yxjc123;
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();
   }
} 

输出

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