JavaEE(系列2) -- 多线程(创建多线程)

news2024/11/28 6:41:35

讲述下面的内容之前,先来回顾一下一个重要的知识点

进程和线程之间的区别

1.进程包括线程。

2.进程有自己独立的内存空间和文件描述符表。同一个进程中的多个线程之间,共享同一份地址空间和文件描述符表。

3.进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。(非常重要的概念)

4.进程之间具有独立性,一个进程挂了,不会影响到别的进程。同一个进程里的多个线程之间,一个线程挂了,可能会把整个进程带走,影响到其他线程的。

接下来进入本文的主要内容. 

目录

1. 创建线程

1.1 继承 Thread 类

1.2 实现 Runnable 接口 

1.3 使用匿名内部类(lambda表达式)

2.Thread 类


1. 创建线程

首先这里,先纠正一个问题,多线程和多进程在我们的电脑中是同时存在的,并不是多线程就替代了多进程.

1.1 继承 Thread 类

创建一个类,然后继承Thread类,然后重写Thread的run 方法.

回顾重写与重载:

方法重载?overload

方法重写?override

方法重载:发生在当前类,是对当前类中的方法进行扩展。方法名称相同,参数的类型或个数不同。

方法重写:发生在子类,是子类对父类方法的扩展。方法名称、参数类型、返回值类型全部相同。

具体可参考:

重写和重载https://blog.csdn.net/weixin_46114074/category_12210388.html?spm=1001.2014.3001.5482

run叫做入口方法,不叫构造。

run是特殊的方法,重写了父类的方法,然后这个方法就会被java自动执行到了。随便写一个方法只能是普通的方法,没有特殊含义。run是特殊方法,是能被自动调用到的。其他方法是普通方法,要我们手动调用。我们无法区分是并行还是并发,都有可能。

创建线程的实例然后使用start进行启动线程.

这个代码涉及到两个线程。

1.main方法所对应地线程(一个进程里至少有一个进程),也可以称为主线程

2.通过t.start创建的新的线程。

点击这里运行程序,其实是idea对应的进程,创建了一个新的java进程,这个java进程来执行咱们自己写的代码。这个java进程里就有两个线程,一个是main,一个是myThread。

运行结果:

进行交替输出,达到了多线程的结果.

1.2 实现 Runnable 接口 

创建一个类, Runnable 接口 

2.实例化这个类,将这个实例作为参数传入到Thread 的实例中. 调用start方法.

1.3 使用匿名内部类(lambda表达式)

创建线程最推荐的写法:使用lambda表达式。这是最简单最直观的写法。

lambda表达式,本质上是一个匿名函数。(没有名字的函数,一次性的。)Java里面,方法是无法脱离类的。在Java里面,lambda就相当于一个例外。

lambda表达式的基本写法。()里面放参数,如果只有一个参数,()可以省略。如果{}里面放函数体,写各种java代码了。如果这里只有一行代码,也可以省略{}。

2.Thread 类

每个线程都有一个唯一的Thread对象与之关联。

Java代码中的Thread对象和操作系统中的线程是一一对应的。

  Thread(String name)中的name参数,是给线程起了一个名字。这里的名字,不影响程序执行,只是方便咱们在调试的时候,快速找到咱们关心的线程。

每个线程都有自己的状态,优先级,上下文,记账信息。(之前提到的这些属性,都是线程的。只不过之前谈到的进程是属于只有一个线程的进程)

1.idDaemo(): 如果true,表示后台线程。如果false,表示前台线程。

       前台线程会阻止java进程结束。必须要java进程中所有的前台线程都执行完,java进程才能结束。而后台线程不阻止java进程结束。哪怕后台线程还没执行完,java进程该结束就结束了。创建的线程默认是前台的。可以通过setDaemon设置成后台。

2.isAlive():描述系统内核里的那个线程是否存活的。线程的入口方法执行完毕,此时系统中的对应线程就没有了。

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

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

相关文章

5.14学习周报

文章目录 前言文献阅读摘要介绍方法模型框架评价指标结果结论 时间序列预测总结 前言 本周阅读文献《A Hybrid Model for Water Quality Prediction Based on an Artificial Neural Network, Wavelet Transform, and Long Short-Term Memory》,文献主要提出了基于人…

iconfont-extract: 一个将iconfont图标转化为React组件的工具

iconfont 提供了海量的图标,同时也方便了前端开发者使用这些图标,只需要添加对应的js、css或者字体文件即可。在我们的项目中使用添加js文件的方式,js文件中都包含了所有的图标,一个项目中通常只会使用其中的一部分,所…

【架构设计】DDD 到底解决了什么问题

文章目录 前言一、架构设计是为了解决系统复杂度1.1 架构设计的误区1.1.1 每个系统都要做架构设计/公司流程要求有架构设计1.1.2 架构设计是为了追求高性能、高可用、可扩展性等单一目标 1.2 架构设计的真正目的1.3 系统复杂度的六个来源及通用解法1.3.1 高性能1.3.1.1 单机复杂…

JavaWeb-一篇文章带你入门CSS(笔记+案列)

目录 CSS是什么基本语法 CSS的引入方式内部样式表行内样式表外部样式表 选择器基础选择器标签选择器类选择器id选择器通配符选择器 复合选择器后代选择器子选择器 常用元素属性字体属性文本属性背景属性圆角矩形 元素的显示模式块级元素行内元素 我们可以使用display属性来修改…

对称加密/非对称加密

古典密码学 起源于古代战争:在战争中,为了防止书信被截获后重要信息泄露,人们开始对书信进行加密。 移位式加密 如密码棒,使用布条缠绕在木棒上的方式来对书信进行加密。 加密算法:缠绕后书写 密钥: 木棒的尺寸 替…

[笔记]深入解析Windows操作系统《四》管理机制

文章目录 前言4.1注册表查看和修改注册表注册表用法注册表数据类型注册表逻辑结构HKEY_CURRENT_USERHKEY_USERS 实验:观察轮廓加载和卸载HKEY_CLASSES_ROOTHKEY_LOCAL_MACHINE 实验:离线方式或远程编辑BCDHKEY_CURRENT_CONFIGHKEY_PERFORMANCE_DATA 前言 本章讲述了…

day3_垃圾回收器

文章目录 Serial回收器ParNew回收器Parallel Scavenge回收器Serial Old回收器Parallel Old回收器CMS(Concurrent Mark Sweeping)回收器G1 主要有7种垃圾回收器,如下所示: 其中有直线关联的表示,这2种垃圾回收器可以配合使用的。 S…

大模型之PaLM2简介

1 缘起 大模型时代。 时刻关注大模型相关的研究与进展, 以及科技巨头的商业化大模型产品。 作为产品&技术普及类文章,本文将围绕PaLM2是什么、特点、如何使用展开。 想要了解更多信息的可以移步官方网站提供的参考文档,后文会给出相关链…

Oracle11g服务说明

一、服务说明 1.OracleDBConsoleorcl:非必须启动 Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。 2.OracleJobS…

一文了解异步编程

promise 什么是promise promise是异步编程的一种解决方案,从语法上来说,Promise是一个对象,从它可以获取异步操作的消息 ES6规定,Promise对象是一个构造函数,接受一个函数作为参数,这个函数会立即执行&a…

Long类型返回前端精度丢失

【1】给前端返回Long会出现精度丢失问题 在《阿里巴巴Java开发手册》中,有一条关于前后端超大整数返回的规约,具体内容如下: 【2】问题复现 后端直接用postman测试接口,返回数据没有问题。但是前端访问接口的时候,发…

系统化了解Micrometer

本文从官方文档整理出一篇系统化全面了解的文章, 后续可能会慢慢补上源码层面的解析: https://micrometer.io/docs 学习本文的目的在于深入了解中间件的监控模块的设计, 先看看主流的做法于核心思想 本文的引用来的笔者的理解于备注 需要做的是: 先理解功能存在的理由设计模式…

kibana 代码执行 (CVE-2019-7609)

漏洞原理 “原型污染”是一种针对JS语言开发的攻击方法。JS语言中,每一个对象都是有其原型(proto)的,而该原型又有其自己的原型对象,直到某个对象的原型为null。而如果JS对其中定义的对象原型的属性读写缺乏控制&…

进程程序替换+简易版shell实现

索引 进程程序替换如何进行程序替换不同程序替换函数之间的区别系统接口调用其他语言的函数替换函数execle 简易版shell实现 进程程序替换 什么是进程程序替换? 指在一个正在运行的进程中,将原来的程序替换成新的程序的过程。 eg:如果我们想…

I IntelliJ IDEA 2023.1 最新解锁方式,支持java20,让Coding飞一会儿

IntelliJ IDEA 2023.1 最新变化 在 IntelliJ IDEA 2023.1 中,我们根据用户的宝贵反馈对新 UI 做出了大量改进。 我们还实现了性能增强,从而更快导入 Maven,以及在打开项目时更早提供 IDE 功能。 新版本通过后台提交检查提供了简化的提交流程…

Android不基于第三发依赖包解析shp文件(2)

接着上篇文章继续 2)Point (点)   一个 Point 由一对双精度坐标组成,存储顺序为 X,Y。    /*** PointGeometry记录读取* */static Geometry renderPointGeometry(byte[] recordContent,GeometryFactory geometryFactory) {int shapetype2

N轴机械臂的MDH正向建模,及python算法

目录 一、前言二、三维空间的坐标系变换三、MDH建模要点四、MDH的变换矩阵推导五、机械臂MDH的python模型六、python源码 一、前言 如果机器人工程师缺乏机器人学理论的支撑和足够的认识,那么随着机器人项目的深入推进,可能会越走越艰难,所谓…

【Lambda】集合的Lambda表达式

【Lambda】集合的Lambda表达式 【一】Stream的方法介绍【1】Stream里常用的方法【2】collect(toList()) & filter【3】map【4】flatMap【5】max&min【6】reduce 【二】常用案例总结【1】准备方法查询数据库获取List结果【2】取值【3】分组【4】去重【5】排序【6】list的…

uniapp制作水印相机给图片添加水印并且保存图片至本地

uniapp保存文件的三种方式 文件主要分为两大类: 1.代码包文件:代码包文件指的是在项目目录中添加的文件。 2.本地文件:通过调用接口本地产生,或通过网络下载下来,存储到本地的文件。 其中本地文件又分为三种&#…

【K8s】Service详解

文章目录 一、Service介绍1、认识Service2、kube-proxy的三种工作模式3、Service的类型 二、Service的使用1、实验数据准备2、Service类型为ClusterIP补充:Endpoints补充:负载分发策略 3、Service类型为HeadLiness3、Service类型为NodePort4、Service的类…