1. 创建一个继承 `Thread` 类的类 通过继承 `java.lang.Thread` 类,可以创建一个新的线程类,并重写其 `run()` 方法。这个方法定义了新线程要执行的任务。 ```java public class MyRunnable implements Runnable { @Override public void run() { // 线程代码 for (int i = 0; i < 5; i++) { System.out.println("Hello from thread: " + Thread.currentThread().getName()); } } } ```
2. 实例化并启动线程 创建该类的实例,并使用 `Thread` 构造函数传递这个对象来创建一个新的线程。然后调用 `start()` 方法启动新线程。 ```java public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread1 = new Thread(myRunnable); Thread thread2 = new Thread(myRunnable); // 启动线程 thread1.start(); thread2.start(); } } ```
3. 使用 `ExecutorService` 管理线程 对于更复杂的多线程场景,推荐使用 `java.util.concurrent.ExecutorService`。它可以提供更好的资源管理和控制功能。 ```java import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; public class Main { public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(2); Runnable task1 = () -> System.out.println("Task 1"); Runnable task2 = () -> System.out.println("Task 2"); // 使用submit方法提交任务,并捕获Future对象 Future> future1 = executor.submit(task1); Future> future2 = executor.submit(task2); // 关闭ExecutorService,等待所有任务完成并释放资源 executor.shutdown(); } } ```
4. 异步操作与回调
对于需要在主线程之外执行的异步操作,可以使用 `Future` 或者 `CompletionStage`(Java 8及之后版本)。这些API允许你提交操作并在完成后获取结果。
```java
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future 总结
Java提供了多种多线程编程的方式,从简单的 `Thread` 继承到更复杂的 `ExecutorService` 和 `Future` 管理,以适应不同场景的需求。通过选择合适的API和最佳实践,你可以有效地控制和优化多线程程序的行为