2026-01-20 09:14:14
在Java中实现多线程主要有以下几种方式,每种方式适用于不同场景,以下是详细说明和代码示例:
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 对象。特点:更灵活,避免单继承限制,推荐使用。
public class Main { public static void main(String[] args) { Runnable task = () -> { System.out.println("线程执行任务: " + Thread.currentThread().getName()); }; Thread thread = new Thread(task); thread.start(); }}3. 实现 Callable 接口 + FutureTaskCallable 接口允许线程返回结果或抛出异常,通过 FutureTask 包装后提交给 Thread。特点:适合需要获取线程执行结果的场景。
import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public class Main { public static void main(String[] args) throws Exception { Callable<String> task = () -> { return "线程返回结果"; }; FutureTask<String> futureTask = new FutureTask<>(task); Thread thread = new Thread(futureTask); thread.start(); System.out.println(futureTask.get()); // 获取结果 }}4. 使用线程池(ExecutorService)通过 Executors 工厂类创建线程池,提交任务执行。特点:高效管理线程生命周期,避免频繁创建/销毁线程的开销。
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); // 创建固定大小线程池 Runnable task = () -> { System.out.println("线程池执行任务: " + Thread.currentThread().getName()); }; executor.submit(task); // 提交任务 executor.shutdown(); // 关闭线程池 }}线程通信机制多线程间可通过以下方式同步或通信:
通过合理选择实现方式,可以高效利用多核CPU资源,同时避免线程安全问题。