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

别瞎写线程!一文搞懂 Java 线程 5 种创建方法

🔥个人主页🌈包球

❄️个人专栏:武魂觉醒值Java创世之力

💻以码为路奔赴热爱


目录

前言

方法一(高耦合)

创建子类,继承Thread,重写run

步骤1 创建子类

步骤2 重写run方法

步骤3 启动新创建的线程

方法二(低耦合)

Runnable接口方法(低耦合)

步骤1; 实现一个Runnable接口

步骤2:重写接口run方法

步骤3:将Runnable作为参数传给Thread类,启动新线程

什么是耦合

方法三(法一匿名内部类写法)

什么是匿名内部类?

步骤1: 创建Thread的子类

步骤2: 重写run

步骤3: 创建Thread的实例,并且使用t引用指向

方法四(Runnable 匿名内部类)

方法五(最推荐:lambda表达式)

前言

本篇文章为大家详细介绍了在Java中 创建线程的五种方法,其中涉及耦合,进程,匿名内部 类Thread类的知识,本篇侧重代码的书写,和每种方法的优缺点, 有助于提高大家的编程能力,如果觉得满意请给点个赞,后续将持续更新多线程相关的知识.


方法一(高耦合)

创建子类,继承Thread,重写run

步骤1 创建子类

我们不能直接在main中去写我们需要去创建一个子类,让子类去继承Thread.

注意:extends 是继承的语法,在Java中一定要体会 :开闭原则

开闭原则:对扩展开放,对修改关闭.在我们的开发中如果想要去增加功能一般都采用扩展的方式,也就是这里的extends语法,更多基础语法知识欢迎关注我的专栏: 武魂觉醒值Java创世之力

步骤2 重写run方法

注意:重写和重载的区别

重写:同一个作用域,方法名字相同,参数列表不同

重载:父类和子类之家,方法名字,参数列表都相同

在这里run就是另一个新线程的入口,这里写的方法相当于是回调函数,此方法让别人去调用,类似于诸葛亮给了刘备一个锦囊妙计,让刘备去使用,而main函数本身就是一个主线程,是java程序的入口.

步骤3 启动新创建的线程

注意Thread t = new MyThread() 为向上转型,在开发中我们偏爱向上转型;

运行结果如下

t,start会调用系统的API从而去创建一个新的线程

结果上main主线程和我们新创建的线程是同时运行的

缺点

  • Java 只能单继承,继承 Thread 后不能再继承其他类
  • 线程对象和执行任务写在同一个类里,耦合高,任务不好复用

方法一这种写法中线程任务是写在一个线程类的方法中,也就是说任务和线程是强绑定的,如果想要去换一个方法写就需要改动很多,下面第二种方法刚好解决了这个问题,我们可以引入Runnable接口

方法二(低耦合)

Runnable接口方法(低耦合)

步骤1; 实现一个Runnable接口
步骤2:重写接口run方法
步骤3:将Runnable作为参数传给Thread类,启动新线程
class MyRunnable implements Runnable{ @Override public void run() { while(true){ System.out.println("hello run"); //异常 try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } } public class Demo2 { public static void main(String[] args) { MyRunnable r = new MyRunnable(); Thread t = new Thread(r); t.start(); while(true){ System.out.println("hello main"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }

Runnable接口中放的是一个可执行的逻辑, 不同于方法一只能给线程使用,还可以给进程使用,采用接口的方式也降低了线程对象和任务的耦合性;在企业中通常要写低耦合的代码

与方法一不同的是,Runnable是需要作为一个参数传给Thread类,Runnable本身不会单独执行,它需要搭配别的载体,而这里Thread就不再需要去重写run方法,只要启动新线程就会执行Runnable里面的方法

方法一和方法二的本质是相同的区别在于方法二的写法更加的解耦合

什么是耦合

耦合代表两部分之间的依赖程度,在生活中,我们作为学生,如果家中出现一些变故,比如家长生病住院,此时我们可能需要暂时离开学校回家去照顾家长,此时就说我们和家是高耦合的,在比如我们和曾经的高中同学,高中同学住院我们完全不需要去离开学校去照顾同学,此时就是低耦合,而在企业中项目众多,更倾向于写低耦合的代码;

方法三(法一匿名内部类写法)

什么是匿名内部类?

匿名内部类是 Java 中一种没有类名、定义在方法或代码块内部的局部内部类,它可以直接继承一个父类或实现一个接口,仅能被实例化一次,用于简化一次性使用的类的代码编写。

步骤1: 创建Thread的子类

步骤2: 重写run

步骤3: 创建Thread的实例,并且使用t引用指向

完整代码如下:

public class Demo3 { public static void main(String[] args) { Thread t = new Thread(){ @Override public void run() { while(true){ System.out.println("hello run"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }; t.start(); while(true){ System.out.println("hello main"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }

方法四(Runnable 匿名内部类)

此处针对Runnable定义匿名内部类的,返回结果是一个Runnable的引用~~ 把这个引用传入Thread

public class Demo4 { public static void main(String[] args) { Thread t = new Thread(new Runnable() { @Override public void run() { while(true){ System.out.println("hello run"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }); t.start(); while(true){ System.out.println("hello main"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }

方法五(最推荐:lambda表达式)

Lambda 表达式是 Java 8 引入的一种函数式编程语法,可以用极简格式实现函数式接口(只有一个抽象方法的接口,如 Runnable),替代匿名内部类,大幅简化代码,只专注写核心逻辑,省略类名、方法名等冗余格式。

public class Demo5 { public static void main(String[] args) { Thread t = new Thread(()->{ System.out.println("hello run"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } }); t.start(); while(true){ System.out.println("hello main"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }
http://www.jsqmd.com/news/859969/

相关文章:

  • Taotoken官方折扣活动如何切实降低模型调用成本
  • 初创公司如何借助Taotoken快速原型验证多个AI模型能力
  • SQL错误注入攻防实战
  • 2026年Q2中国市政管道短管置换优质厂家首选推荐:合肥玉通管道工程有限公司 - 安互工业信息
  • 应对高并发场景Taotoken的容灾与路由策略如何保障服务稳定
  • 告别手忙脚乱找字幕:Jellyfin智能字幕插件MaxSubtitle完全指南
  • 【Midjourney布料质感模拟终极指南】:20年CG专家亲授7大材质参数调优公式,92%用户忽略的Gamma映射陷阱曝光
  • 飞控延迟 10 毫秒就炸机、多舵机不同步晃得厉害?EtherCAT 工控机如何实现无人机微秒级精准控制
  • 专业干货:低查重AI教材编写工具,助力教材创作新高度!
  • 2026长沙全域奢侈品回收攻略:多网点布局上门变现更省心 - 诚鑫名品
  • 每天看800份简历的HR真的要失业了吗?AI简历筛选如何解决招聘痛点?
  • 初创团队如何利用Taotoken的Token Plan实现AI成本精细化管理
  • HSTracker:macOS炉石传说数据分析工具终极使用指南
  • 英伟达816亿营收+国产2000亿参数图像模型:AI军备赛再升级
  • 企业 SSL 证书审核难不难?怕麻烦就选速安信!
  • Taotoken模型广场如何帮助开发者选择合适的模型进行调试
  • 专业级多框架可视化解决方案:Viser.js 技术深度解析
  • 将Hermes Agent对接至Taotoken的自定义提供商配置详解
  • HS2-HF_Patch终极增强补丁:5分钟解锁Honey Select 2完整创作生态
  • 数字孪生 · 零基础4周速成学习计划(书籍+实操+项目落地)
  • 明日深圳文博会!BOSMA博冠与您相约
  • 智能音频切片工具终极指南:告别手动剪辑的烦恼
  • 2026年Q2中国污水池清理优质服务商首选推荐:合肥玉通管道工程有限公司 - 安互工业信息
  • 韦斯实验——换气式精密高温烤箱:半导体制造的“隐形工艺大师”
  • 从资源嗅探到流媒体处理:猫抓Cat-Catch浏览器扩展的技术架构演进之路
  • 百度文库纯净打印终极指南:3分钟解锁文档自由保存的完整方案
  • 深度解析Perplexity图书评论搜索机制,手把手教你绕过信息茧房获取真实读者反馈
  • RPC 核心概念 01:什么是 RPC?为什么需要 RPC?
  • 如何利用OOTDiffusion实现智能虚拟试衣:从技术原理到实战应用的完整指南
  • 谷歌推出搭载 AI 的音频智能眼镜,携手 Warby Parker 与 Gentle Monster 合作