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

JavaEE-多线程实战02

接上

多线程编程实战01


 第三个多线程程序

package thread.test;//定义了一个叫MyThread3的类,实现了Runable接口,所以它必须重写run()方法
class MyThread3 implements Runnable {@Overridepublic void run() {//线程执行的具体内容//进入一个无限循环,每一秒输出一句“hello runnable”while (true) {System.out.println("hello runnable");try {//让线程睡眠1秒。避免一直疯狂输出Thread.sleep(1000);} catch (InterruptedException e) {//如果睡眠被中断,抛出运行时异常RuntimeExceptionthrow new RuntimeException(e);}}}
}//主程序入口
public class ThreadDemo3 {public static void main(String[] args) {//新建一个线程,线程要执行的人物是MyThread3实现的run()方法Thread t=new Thread(new MyThread3());//启动线程,注意:不是调用run(),这样才会新建一个线程t.start();//主线程也进入无限循环while (true) {//每一秒输出一行“hello main”System.out.println("hello main");try {//让线程休眠1秒Thread.sleep(1000);} catch (InterruptedException e) {//如果休眠中断,抛出运行时异常throw new RuntimeException(e);}}}
}

Runnable 和 Thread 的区别

特点Runnable 接口Thread
本质是一个接口是一个,继承自 Object,实现了 Runnable 接口
用途只定义了一个任务(run() 方法),不负责线程的创建既可以定义任务(重写 run()),也能直接创建和管理线程
继承限制可以避免单继承局限(因为类还可以继承别的类)继承了 Thread 后,不能再继承其他类(Java 单继承)
推荐使用场景任务和线程分离,程序更灵活、解耦小项目、简单场景下可以直接继承 Thread 简单快速

为什么写 Thread t = new Thread(new MyThread3());

原因就是:

  • new MyThread3() 是一个实现了 Runnable 的对象,它描述了线程应该执行什么任务(即 run() 方法里的代码)。

  • new Thread(Runnable target) 这个构造方法,把 Runnable 包装进去,真正由 Thread 来创建和控制线程

  • 最后通过 t.start() 来开启这个线程,执行 MyThread3.run() 里面的逻辑。

简单理解就是

  • Runnable 负责写任务(要干什么事)。

  • Thread 负责开辟新线程、调度执行这个任务。

打个比方(形象理解)

  • Runnable 就像是工作说明书(比如说明:搬砖、洗衣服、打扫卫生)。

  • Thread 就像是真正的工人,要按照说明书去干活。

你可以写好很多不同的说明书(不同的 Runnable),然后招很多工人(Thread)去根据说明来工作。

例子

方式一:实现 Runnable(推荐 ✅)
class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("任务开始了");}
}public class Test {public static void main(String[] args) {Runnable r = new MyRunnable();  // 任务Thread t = new Thread(r);        // 线程 + 任务t.start();                      // 开启线程}
}
 方式二:直接继承 Thread(简单,但不够灵活)
class MyThread extends Thread {@Overridepublic void run() {System.out.println("任务开始了");}
}public class Test {public static void main(String[] args) {Thread t = new MyThread();   // 直接是线程t.start();                  // 开启线程}
}

总结一下

  • Runnable 只管写任务,不管线程怎么执行。

  • Thread 既是线程本身,也能直接运行任务。

  • 推荐用 Runnable,因为更加灵活,避免继承带来的局限,可以更好地与线程池等高级功能结合。

相关文章:

  • 计算机图形学(一):基础
  • err: Error: Request failed with status code 400
  • chrony服务器(2)
  • Azure Devops - 尝试一下在Pipeline中使用Self-hosted Windows agent
  • MongoDB与PHP7的集成与优化
  • 如何让自己的博客可以在百度、谷歌、360上搜索到(让自己写的CSDN博客可以有更多的人看到)
  • 电子病历高质量语料库构建方法与架构项目(智能质控体系建设篇)
  • 英文中数字读法规则
  • 【黑马JavaWeb+AI知识梳理】前端Web基础02 - JS+Vue+Ajax
  • 通过数据增强打造抗噪音多模态大模型
  • 微服务即时通信系统(十二)---入口网关子服务
  • Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)
  • [AHOI2001] 质数和分解
  • 【计算机网络物理层】从信号传输到介质选型的核心技术解析
  • 机器学习基础理论 - 分类问题评估指标
  • PDF处理控件Aspose.PDF指南:如何使用 C# 在 PDF 中搜索
  • Maven 4.0.0 模式-pom.xml配置详解
  • MSO-Player:基于vlc的Unity直播流播放器,支持主流RTSP、RTMP、HTTP等常见格式
  • LLM模型的几何抽象:上文向量与Token距离的容量优化
  • GRS认证审核内容?GRS认证基本概述?GRS认证的好处?
  • 外交部:欢迎外国朋友“五一”来中国
  • 跨海论汉|专访白馥兰:对中国农业史的兴趣,从翻译《齐民要术》开始
  • 经济日报:多平台告别“仅退款”,规则调整有何影响
  • 滨江集团去年营收约691亿元,尚未结算的预收房款1253亿元
  • 广州一人均500元的日料店回收食材给下一桌?市场监管部门介入调查
  • 宜家上海徐汇商场明天恢复营业,改造后有啥新变化?