Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 与框架

Java 类参考

Java 有用资源

Java - 创建线程



在 Java 中创建线程有两种不同的方法。我们已将它们列出如下:

  • 通过实现 Runnable 接口
  • 通过扩展 Thread 类

通过实现 Runnable 接口创建线程

如果您的类旨在作为线程执行,那么您可以通过实现Runnable接口来实现这一点。您需要遵循三个基本步骤:

步骤 1

第一步,您需要实现Runnable接口提供的run()方法。此方法为线程提供了一个入口点,您将在此方法中放置完整的业务逻辑。以下是run()方法的简单语法:

public void run( )

步骤 2

第二步,您将使用以下构造函数实例化一个Thread对象:

Thread(Runnable threadObj, String threadName);

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

步骤 3

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

void start();

通过实现 Runnable 接口创建线程的示例

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

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();
   }
}

输出

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 类中可用方法创建的多个线程时提供了更大的灵活性。

步骤 1

您需要重写run()方法,该方法在 Thread 类中可用。此方法为线程提供了一个入口点,您将在此方法中放置完整的业务逻辑。以下是run()方法的简单语法:

public void run( )

步骤 2

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

void start( );

通过扩展 Thread 类创建线程的示例

以下是重写为扩展 Thread 的前一个程序:在此示例中,我们创建了一个 ThreadDemo 类,该类扩展了 Thread 类。我们在构造函数()方法中调用 super(name) 为线程分配名称,并调用 super.start() 启动线程处理。

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();
   }
}

输出

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

示例:演示 sleep() 方法

在此示例中,我们展示了sleep()方法的使用来延迟处理。它有助于在输出中显示并行处理。我们在 run 方法中添加了 Thread.sleep() 调用。InterruptedException 被处理,因为线程在休眠模式下可能会被中断。

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); 
         try {
			Thread.sleep(50);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
      }
      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-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Dead
广告