如果你的类打算作为一个线程执行并且实现了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.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-1");
Thread thread2 = new Thread(runnableDemo2, "Thread-2");
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);
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();
}
}
示例1
在这个例子中,我们创建了一个扩展Thread类的ThreadDemo类。我们在构造函数中调用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-2, State: Running
Thread: Thread-1, 2
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类。我们没有传递任何名字给Thread,并且它将打印系统为线程分配的默认名字。
示例代码
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();
}
}
输出
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