1. 创建线程类(Thread Class) 可以通过继承`java.lang.Thread`类并重写其`run()`方法的方式创建和管理线程。
# 示例代码: ```java class MyThread extends Thread { public void run() { for (int i = 0; i < 100; i++) { System.out.println("Hello World from thread " + getName()); } } } public class MainClass { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); // start the thread } } ``` 在上述代码中,`MyThread`类继承了`Thread`类,并重写了`run()`方法。`start()`方法启动线程,使之开始执行`run()`方法内的代码。
2. 使用Runnable接口 通过实现`java.lang.Runnable`接口并提供一个实现`run()`的方法来创建线程,然后将该Runnable对象传递给`Thread`类的构造函数。
# 示例代码: ```java class MyTask implements Runnable { public void run() { for (int i = 0; i < 100; i++) { System.out.println("Hello World from task " + this); } } } public class MainClass { public static void main(String[] args) { Thread t = new Thread(new MyTask()); t.start(); } } ``` 在上述代码中,`MyTask`实现了`Runnable`接口,并提供了其自己的线程执行逻辑。通过将`MyTask`的实例传递给`Thread`构造函数来创建和启动一个新线程。
3. 使用Executor框架 Java中的`java.util.concurrent.ExecutorService`可以更灵活地管理和调度任务,提供诸如线程池、任务队列等高级功能。
# 示例代码: ```java import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class MainClass { public static void main(String[] args) { ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5); Runnable task1 = () -> System.out.println("Task 1 executed"); Runnable task2 = () -> System.out.println("Task 2 executed"); executor.execute(task1); executor.execute(task2); // 确保所有任务执行完成(可选,非必需) // executor.shutdown(); // while (!executor.isTerminated()) {} } } ``` 在上述代码中,我们使用`Executors.newFixedThreadPool(5)`创建了一个固定大小为5的线程池。然后,我们将Runnable对象添加到线程池中执行。
总结 以上方法都可以用来实现多线程编程,在选择方法时需要考虑具体情况和需求,例如是否需要复杂的线程调度、任务队列管理或者线程间的通信等。在实际应用中,使用Executor框架通常更加灵活高效