当前位置: 首页 > news >正文

Java中创建线程的几种方式

在Java中,创建线程主要有以下几种方式:


1. 继承Thread

class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程执行(继承Thread)");}
}// 使用方式
MyThread thread = new MyThread();
thread.start();
特点:
  • 优点:简单直接,适合快速实现。
  • 缺点:Java不支持多重继承,若已继承其他类则无法使用此方式。
  • 资源共享:每个线程需创建独立实例,难以共享资源。

2. 实现Runnable接口

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("线程执行(实现Runnable)");}
}// 使用方式
Thread thread = new Thread(new MyRunnable());
thread.start();// 或使用Lambda简化(Java 8+)
Thread lambdaThread = new Thread(() -> System.out.println("Lambda线程"));
lambdaThread.start();
特点:
  • 优点
    • 解耦任务与线程,逻辑更清晰。
    • 可实现接口或继承其他类。
    • 天然支持资源共享(多个线程可操作同一Runnable实例)。
  • 缺点:任务无返回值。

3. 实现Callable接口

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {return "线程执行结果(实现Callable)";}
}// 使用方式
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
Thread thread = new Thread(futureTask);
thread.start();// 获取结果
String result = futureTask.get(); // 阻塞等待结果
特点:
  • 优点
    • 可返回结果(通过FutureTask.get()获取)。
    • 支持抛出异常(Runnablerun()不能抛出受检异常)。
  • 缺点:使用稍复杂,需结合FutureTask或线程池。

4. 使用线程池(推荐)

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(5);// 提交任务(支持Runnable/Callable)
executor.execute(() -> System.out.println("Runnable任务")); // 无返回值
Future<String> future = executor.submit(() -> "Callable任务"); // 有返回值// 关闭线程池
executor.shutdown();
特点:
  • 优点
    • 资源复用:避免频繁创建/销毁线程的开销。
    • 任务管理:支持任务队列、超时、返回值等功能。
    • 隔离性:不同业务可使用独立线程池,避免互相影响。
  • 最佳实践:生产环境优先使用线程池(如ThreadPoolExecutor)。

对比总结

方式返回值异常处理资源共享灵活性适用场景
继承Thread不支持无法抛受检异常简单场景,不推荐主流使用
实现Runnable不支持无法抛受检异常无返回值任务,主流方式
实现Callable支持支持抛异常需返回结果的任务
线程池支持支持抛异常最高高并发、生产环境首选方案

选择建议

  1. 优先用RunnableCallable(而非继承Thread),避免单继承限制。
  2. 需要返回值 → 选Callable
  3. 高并发/性能敏感必须用线程池ExecutorService),手动创建线程易引发资源耗尽。
  4. 简化代码 → 使用Lambda表达式(Runnable/Callable均可)。

📌 重要

  • 线程资源必须通过线程池提供,禁止在应用中自行显式创建线程(《阿里巴巴Java开发规范》)。
  • 线程池参数需结合实际场景(CPU密集型、IO密集型)优化配置。
http://www.lqws.cn/news/442531.html

相关文章:

  • 软考-软件设计师--校验码
  • 矩阵置零C++
  • jmeter学习
  • ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
  • HarmonyOS开发利器:ArkTS全解析
  • 深入解析connect函数:阻塞与非阻塞模式下的行为差异
  • 利用DevEco Studio对RK3588的HiHopesOS-4.1.110(OpenHarmony)进行Qt程序编写
  • Linux基本指令篇 —— mkdir指令
  • linux 非root 非sudo 如何安装软件
  • 基于Geotools的两条道路相交并根据交点形成新路线实战-以OSM数据为例
  • 微信小程序传参过来了,但是数据没有获取到
  • 编码规则设计唯一编码
  • 基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)
  • YunParking路内停车源码追缴分成机制设计与技术实现​
  • docker使用技巧之把扩展卷命名变成有意义
  • AWS Security Hub邮件告警设置
  • 计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体
  • 系统思考:结构影响行为
  • 基于 LLM 的网络钓鱼网站检测多代理框架
  • WEB安全--WAF的绕过思路
  • Singularity 安装
  • 浏览器标题闪烁功能
  • python形成性考核管理系统
  • 2023年蓝桥杯青少第十四届蓝桥杯Scratch省赛中级组真题——小狗避障
  • webpack和vite对比解析(AI)
  • OpenCV 图像直方图
  • 中泰制造企业组网新方案:中-泰企业国际组网专线破解泰国工厂访问国内 OA/ERP 卡顿难题
  • 【世纪龙科技】智能网联汽车自动驾驶虚拟实训软件
  • 【鸿蒙HarmonyOS Next App实战开发】​​​​ArkUI纯色图生成器
  • Linux中Ansible常用模块