Java 中创建线程的四种方式

前言

在 Java 编程中,多线程是实现并发编程的重要手段。掌握如何正确创建和管理线程,是每个 Java 开发者必须具备的基础技能。本文将介绍 Java 中创建线程的四种常见方式,并对比它们的优缺点。

继承Thread类

这是最基础也是最简单的创建线程的方法。

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Hello from " + this.getName());
    }
}

// 使用
MyThread thread = new MyThread(); 
thread.start();
优点

简单直观,实现简单。

缺点

由于Java不支持多继承,继承了Thread类就不能继承其他类。

实现Runnable接口

通过实现Runnab接口并将其传入Thread构造器来创建线程。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Hello from Runnable");
    }
}

// 使用
Thread thread = new Thread(new MyRunnable());
thread.start();
优点

避免了单继承限制,更加灵活,推荐使用。

实现Callable接口 + FutureTask

与Runnable类似,但Callable可以返回结果以及抛出异常。

class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "Hello from Callable";
    }
}

// 使用
Callable<String> callable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(callable);
new Thread(futureTask).start();

System.out.println(futureTask.get()); // 获取返回值
优点

可以返回结果以及异常处理。

使用线程池(ExecutorService)

利用java提供的强大线程池来自定义线程池参数,高效复用线程池。

// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(2);

// 提交任务
executor.submit(() -> System.out.println("Task 1"));
executor.submit(() -> System.out.println("Task 2"));

// 关闭线程池
executor.shutdown();

总结

方法 是否有返回值 是否推荐 说明
继承 Thread 简单但不灵活
实现 Runnable 常用方式
实现 Callable 支持返回值和异常
使用线程池 否/是(取决于任务) ✅✅✅ 推荐用于项目

以上就是Java中创建线程的几种方式,如果还有其他方式,欢迎评论区补充!

你可能感兴趣的:(Java,java,开发语言)