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,因为更加灵活,避免继承带来的局限,可以更好地与线程池等高级功能结合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【无报错,亲测有效】如何在Windows和Linux系统中查看MySQL版本

如何在Windows和Linux系统中查看MySQL版本 MySQL作为最流行的开源关系型数据库管理系统之一,了解如何查看其版本信息对于开发者和数据库管理员来说是常用的一个基本操作。本文将详细介绍在Windows和Linux系统中查看MySQL版本的方法。 文章目录 如何在Windows和Linu…

数字智慧方案5961丨智慧能源与运维云平台解决方案(52页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:智慧能源与运维云平台解决方案 在当今数字化时代,能源管理与设备运维的智能化、高效化成为企业发展的关键。智慧能源与运维云平台解决方案应运而生,为企业提供了全面且先进的能源管理和运维手段…

Qt指南针

Qt写的指南针demo. 运行结果 滑动调整指针角度 实现代码 h文件 #ifndef COMPASS_H #define COMPASS_H#include <QWidget> #include <QColor>class Compass : public QWidget {Q_OBJECT// 可自定义属性Q_PROPERTY(QColor backgroundColor READ backgroundColor WRI…

北大新媒体运营黄金提示词 | 北大Deepseek系列第七弹《DeepSeek与新媒体运营》,13所大学系列一站下载

今天大师兄给大家推荐的是北京大学Deepseek系列第七弹《DeepSeek与新媒体运营》。 本文档系统介绍了DeepSeek模型在新媒体运营中的应用&#xff0c;技术原理、实践案例及行业挑战。 适用人群&#xff1a;新媒体运营人员、AI研究者、企业决策者。 思维导图 napkin生成 《老…

2025年真实面试问题汇总(一)

Spingboot中如何实现有些类是否加载 在 Spring Boot 中可以通过 条件化配置&#xff08;Conditional Configuration&#xff09; 来控制某些类是否加载。Spring Boot 提供了一系列 Conditional 注解&#xff0c;允许根据特定条件动态决定 Bean 或配置类是否生效。以下是常见的…

综合案例建模(2)

文章目录 螺旋片端盖多孔扭转环作业一作业二作业三 螺旋片端盖 上视基准面画草图&#xff0c;拉伸250&#xff0c;向外拔模15度 以地面圆&#xff08;如果不行就转换实体引用&#xff09;&#xff0c;创建螺旋线&#xff0c;锥形螺纹线15度向外 前视基准面去画草图 以上一步草图…

Qt5与现代OpenGL学习(三)纹理

把第一张图放到D盘的1文件夹里面&#xff1a;1.png triangle.h #ifndef WIDGET_H #define WIDGET_H#include <QOpenGLWidget> #include <QOpenGLFunctions> #include <QOpenGLVertexArrayObject> #include <QOpenGLShaderProgram> #include <QOpen…

这是一款好用的PDF工具!

用户习惯有时确实非常顽固&#xff0c;想要改变它可能需要漫长的时间。 比如PDF软件&#xff0c;我认为国产的福/昕、万/兴等软件都非常不错&#xff0c;它们贴合国人的使用习惯&#xff0c;操作起来非常顺手。但因为我习惯使用DC&#xff0c;所以在处理PDF文档时&#xff0c;…

轻松实现CI/CD: 用Go编写的命令行工具简化Jenkins构建

在工作中&#xff0c;随着开发维护的服务越来越多&#xff0c;在很长的一段时间里&#xff0c;我来回在多个服务之间开发、构建、查看容器是否启动成功。尤其是开发测试阶段&#xff0c;需要打开jenkins页面、搜索应用、再构建、再打开rancher页面、搜索应用&#xff0c;这一连…

第十六届蓝桥杯 2025 C/C++B组第一轮省赛 全部题解(未完结)

目录 前言&#xff1a; 试题A&#xff1a;移动距离 试题C&#xff1a;可分解的正整数 试题D&#xff1a;产值调整 试题E&#xff1a;画展布置 前言&#xff1a; 我参加的是第一轮省赛&#xff0c;说实话第一次参加还是比较紧张的&#xff0c;真到考场上看啥都想打暴力&…

Qt Creator环境编译的Release软件放在其他电脑上使用方法

本文解决的问题&#xff1a;将Qt Creator环境编译的exe可执行程序放到其他电脑上不可用情况 1、寻找windeployqt工具所在路径" D:\Qt5.12.10\5.12.10\msvc2015_64\bin" &#xff0c;将此路径配置到环境变量&#xff1b; 2、用Qt Creator环境编译出Release版本可执行…

使用skywalking进行go的接口监控和报警

安装 helm upgrade --install skywalking ./skywalking-v1 --namespace skywalking --create-namespace 查看安装结果 kubectl get pod -n skywalking NAME READY STATUS RESTARTS AGE elasticsearch-6c4ccbf99f-ng6sk 1/1 …

2025年- H16-Lc124-169.多数元素(技巧)---java版

1.题目描述 2.思路 3.代码实现 import java.util.Arrays;public class H169 {public int majorityElement(int[] nums) {Arrays.sort(nums);int nnums.length;return nums[n/2];}public static void main(String[] args){H169 test07new H169();int[] nums{2,2,1,1,1,2,2};int…

k8s术语pod

Pod概览 理解Pod Pod是kubernetes中你可以创建和部署的最小也是最简的单位,pod代表着集群中运行的进程。 Pod中封装着应用的容器(有的情况下是好几个容器),存储、独立的网络IP,管理容器如何运行的策略选项。Pod代表着部署的一个单位:kubemetes中应用的一个实例,可能由一个…

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》章节思维导图

今天看到了几本书的思维导图&#xff0c;感触颇深&#xff0c;如果思维导图只是章节安排&#xff0c;这样的思维导图有毛用。 给出《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》实质内容章节的思维导图。思维导图的优势是逻辑关系和知识…

Nacos简介—4.Nacos架构和原理二

大纲 1.Nacos的定位和优势 2.Nacos的整体架构 3.Nacos的配置模型 4.Nacos内核设计之一致性协议 5.Nacos内核设计之自研Distro协议 6.Nacos内核设计之通信通道 7.Nacos内核设计之寻址机制 8.服务注册发现模块的注册中心的设计原理 9.服务注册发现模块的注册中心的服务数…

【MySQL】复合查询与内外连接

目录 一、复合查询 1、基本查询回顾&#xff1a; 2、多表查询&#xff1a; 3、自连接&#xff1a; 4、子查询&#xff1a; 单列子查询 多行子查询&#xff1a; 多列子查询&#xff1a; 在from语句中使用子查询&#xff1a; 5、合并查询&#xff1a; union&#xff1…

后端工程师需要掌握哪些基础技能

后端工程师是构建系统核心逻辑的关键角色&#xff0c;需要掌握从基础到进阶的完整技术栈。以下是结合国内实际开发需求的技能树整理&#xff0c;附带学习建议&#xff1a; 一、编程语言&#xff08;至少精通1-2种&#xff09; # 国内主流选择&#xff08;按优先级排序&#x…

万字重谈C++——继承篇

继承的概念及定义 继承的概念 继承&#xff08;Inheritance&#xff09;机制作为面向对象程序设计中最核心的代码复用方式&#xff0c;它不仅允许开发人员在保留基础类特性的前提下进行功能扩展&#xff08;从而创建新的派生类&#xff09;&#xff0c;更重要的是体现了面向对…

移动光猫 UNG853H 获取超级管理员账号密码

注&#xff1a;电脑连接光猫&#xff0c;网线不要接2口&#xff08;2口一般是IPTV网口&#xff09; 首先浏览器打开 192.168.1.1&#xff0c;使用光猫背面的用户名密码登录。&#xff08;user用户名&#xff09; 然后在浏览器中另开一个窗口打开以下地址&#xff1a; http://…