在 Java 中,线程可以通过两种主要方式创建和调用
在 Java 中,线程可以通过两种主要方式创建和调用:继承 Thread 类和实现 Runnable 接口。此外,Java 8 引入的 lambda 表达式也使得线程的创建和使用更加简洁。以下是详细说明和示例:
1. 继承 Thread 类
通过继承 Thread 类并重写 run 方法,可以创建一个线程。
示例:
java
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程正在运行: " + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // 启动线程
}
}
2. 实现 Runnable 接口
通过实现 Runnable 接口并实现 run() 方法,可以将任务传递给 Thread 类来创建线程。
示例:
java
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("线程正在运行: " + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start(); // 启动线程
}
}
3. 使用 Lambda 表达式
在 Java 8 及更高版本中,可以使用 lambda 表达式简化 Runnable 接口的实现。
示例:
java
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("线程正在运行: " + Thread.currentThread().getName());
});
thread.start(); // 启动线程
}
}
注意事项
start() 方法:调用 start() 方法会启动一个新线程,并执行 run() 方法。不要直接调用 run() 方法,因为这不会启动新线程,而是在当前线程中执行。
线程生命周期:线程的生命周期包括新建、就绪、运行、阻塞、终止等状态。start() 方法将线程从新建状态转换为就绪状态,等待 CPU 调度执行。
线程安全:在多线程环境中,确保对共享资源的访问是线程安全的,可以使用同步机制(如 synchronized 关键字或 Lock 接口)。
通过上述方法,你可以在 Java 中创建并调用线程,从而实现并发编程。选择合适的方法取决于具体需求和设计风格。