《Java 创建线程有哪些方式?一篇给你讲明白》
正文一、开头先说人话兄弟们Java 里说“创建线程”听起来像一件事实际上像点烧烤套餐有的是单点有的是叫老板帮你烤有的是点完还能等结果有的是直接包年办会员看起来都能“开个线程”但姿势不一样后劲也不一样。一句话先立住Java 创建线程常见有 4 种继承 Thread、实现 Runnable、实现 Callable 配合 FutureTask、使用线程池。二、先看总图4 种方式的关系三、方式一继承 Thread这是最直白的一种像你自己撸起袖子亲自上烤炉。public class ThreadDemo extends Thread { Override public void run() { System.out.println(线程启动了开始干活); } public static void main(String[] args) { ThreadDemo thread new ThreadDemo(); thread.start(); // 别调 run()那样只是普通方法调用线程根本没有启动 } }这种方式的特点写法简单适合入门但 Java 只能单继承继承了 Thread以后就不方便再继承别的类了所以它适合练手不太适合真实项目里到处乱用。四、方式二实现 Runnable这才是更常见的方式。你可以把它理解成你不是“员工本身”你是“任务单”然后交给线程去执行。public class RunnableDemo { public static void main(String[] args) { Runnable task () - System.out.println(线程启动了开始执行任务); Thread thread new Thread(task); thread.start(); // 任务交给线程工种分离 } }为什么推荐它避免单继承限制任务和线程解耦一个任务还可以给多个线程复用这就像烧烤店里你写的是“谁去烤 20 串羊肉”这个任务而不是自己变成烤炉。Runnable 是一个函数式接口表示一个可以被线程执行的任务核心方法是 run()。通过 new Thread(task) 可以把任务交给线程对象再调用 start() 启动线程。调用 start() 后JVM 会创建新的线程并在新线程中执行 Runnable 的 run() 方法。五、方式三实现 Callable前两种方式有个小问题干完活没法直接返回结果。如果你想让线程执行完后顺手把结果带回来就该上 Callable 了。import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class CallableDemo { public static void main(String[] args) throws Exception { CallableString task () - { return 线程执行完毕结果带回来了; }; FutureTaskString futureTask new FutureTask(task); new Thread(futureTask).start(); System.out.println(futureTask.get()); // 等线程干完再拿结果 } }Callable 表示一个有返回值的任务。FutureTask 表示一个未来可以拿到结果的任务包装器。它的亮点可以返回结果可以抛异常更适合有“计算结果”的任务这就像你不是只让伙计去送菜而是还要求他回来汇报“哥羊肉串送到了客户还加了两瓶可乐。”六、方式四线程池前面几种方式都像“现招人现上岗”。小项目凑合大项目这么玩线程一多系统容易被你玩成劳务市场。这时候就该用线程池了。import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class PoolDemo { public static void main(String[] args) { ExecutorService pool Executors.newFixedThreadPool(3); pool.execute(() - System.out.println(线程池里的线程开始干活)); pool.shutdown(); // 活干完可以收工但别忘了关门 } }线程池像什么像店里提前招好 3 个固定员工来单子就分配不用每次都重新招人。它的好处复用线程减少创建开销方便统一管理更适合真实项目所以实际开发里最推荐的是线程池不是手动一个一个 new Thread()。七、再来一张图它们的区别八、怎么选如果你只是想学会怎么起线程入门看 Thread日常写法用 Runnable需要返回值用 Callable真上项目优先线程池你可以这么记Thread 是入门版Runnable 是常规版Callable 是带结果版线程池是生产环境版。九、一句话总结Java 创建线程有很多方式但真正项目里最常用、最靠谱的通常还是线程池。