登录
首页 >  文章 >  java教程

Java创建线程方法全解析

时间:2026-01-31 12:18:55 216浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Java如何创建线程?线程创建方法详解》,聊聊,我们一起来看看吧!

继承Thread类最简但受限于单继承;实现Runnable接口更灵活,推荐日常使用;需返回值时用Callable+FutureTask;生产环境应使用线程池。

在Java中如何创建线程_Java线程创建方式解析

直接继承 Thread 类是最简方式,但只能单继承

Java 中创建线程最直观的方法是让类继承 Thread,重写 run() 方法。这种方式适合逻辑简单、无需复用已有类结构的场景。

  • 必须调用 start() 启动线程,直接调用 run() 只是普通方法执行,不会开启新线程
  • 由于 Java 不支持多继承,若该类已继承其他父类(如 FrameActivity),就无法再继承 Thread
  • 示例:
    class MyThread extends Thread {
        public void run() {
            System.out.println("Thread running: " + Thread.currentThread().getName());
        }
    }
    // 使用
    new MyThread().start();

实现 Runnable 接口更灵活,推荐日常使用

把任务逻辑封装进 Runnable 实现类,再传给 Thread 构造器,解耦了「任务」和「执行者」,也规避了单继承限制。

  • Runnable 是函数式接口,可用 Lambda 简写:new Thread(() -> System.out.println("Lambda thread")).start();
  • 同一个 Runnable 实例可被多个 Thread 复用,适合共享任务场景(如多线程处理队列)
  • 注意:它没有返回值,也不能抛出受检异常(Exception),若需结果或异常传播,得换方案

Callable + FutureTask 获取线程执行结果

当线程执行后需要返回值或捕获异常时,Runnable 不够用,必须升级到 Callable

  • Callablecall() 方法可返回泛型结果、抛出异常;而 Runnablerun() 返回 void 且不能抛受检异常
  • 不能直接传给 Thread,必须包装成 FutureTask(它同时实现了 RunnableFuture
  • 示例:
    Callable<Integer> task = () -> {
        Thread.sleep(100);
        return 42;
    };
    FutureTask<Integer> ft = new FutureTask<>(task);
    new Thread(ft).start();
    System.out.println(ft.get()); // 阻塞获取结果

线程池才是生产环境的标配,别手写 new Thread()

频繁创建/销毁线程开销大,且无统一管理。JDK 提供的 ExecutorService 是标准解法,底层复用固定线程数,支持队列、拒绝策略、生命周期控制。

  • 优先用 Executors 工厂方法(如 newFixedThreadPool(4)),但注意 newCachedThreadPoolnewScheduledThreadPool 的潜在风险(如无界队列、线程泄漏)
  • 提交 RunnableCallable 均可:executor.submit(() -> {...})executor.submit(callable)
  • 务必调用 shutdown()shutdownNow(),否则 JVM 可能不退出(守护线程不影响 JVM 终止,但普通线程会)
实际项目里,Runnable + 线程池覆盖 90% 场景;Callable 用于需要结果的异步计算;手写 Thread 子类基本只出现在教学或极简脚本中。别忽略线程复用和资源释放——这才是线上稳定性的关键。

好了,本文到此结束,带大家了解了《Java创建线程方法全解析》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>