Java 简明教程
Java - Creating a Thread
在 Java 中有两种创建线程的不同方法。我们已将其列出如下:
-
通过实现 Runnable 接口
-
通过扩展 Thread 类
Create a Thread by Implementing a Runnable Interface
如果准备将您的类作为线程执行,那么可以通过实现 Runnable 接口实现此目的。您需要遵循三个基本步骤 −
Step 1
第一步,您需要实现 Runnable 接口提供的 run() 方法。此方法为线程提供了一个入口点,您需要将完整业务逻辑放入此方法内。以下是 run() 方法的一个简单语法:
public void run( )
Step 2
作为第二步,您将使用以下构造函数实例化一个 Thread 对象 −
Thread(Runnable threadObj, String threadName);
其中,threadObj 是实现 Runnable 接口的类的实例,threadName 是赋予新线程的名称。
Example to Create a Thread by Implementing a Runnable Interface
在本示例中,我们通过实现 Runnable 接口来创建一个类 RunnableDemo。RunnableDemo 类具有 run() 方法实现。在 main 类 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
Create a Thread by Extending a Thread Class
创建线程的第二种方法是,使用以下两个简单步骤,创建一个扩展 Thread 类的类。这种方法提供了更多灵活性,可使用 Thread class 中的可用方法来处理创建的多个线程。
Step 1
您需要覆盖 Thread 类中可用的 run() method 。此方法为线程提供了一个入口点,您需要将您的完整业务逻辑放入此方法中。以下是 run() 方法的简单语法:
public void run( )
Step 2
一旦创建 Thread 对象,便可以通过调用 start() 方法来启动它,该调用会执行一个 run( ) 方法调用。以下是 start() 方法的一个简单语法 −
void start( );
Example to Create a Thread by Extending a Thread Class
下面是对继承 Thread 的程序的重写 - 在本示例中,我们创建了一个扩展 Thread 类的 ThreadDemo 类。我们在 constructor() 方法中调用 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
Example: Demonstrating sleep() Method
在此示例中,我们展示了使用 sleep() method 来延迟处理。它有助于在输出中显示并行处理。我们在 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