【JavaEE】线程的概念

文章目录

  • 1、什么是线程
  • 2、进程和线程的区别
  • 3、多线程的概述
  • 4、在Java中实现多线程的方法
    • 1.继承Thread类
    • 2.实现Runnable接口
    • 3.使用匿名内部类来继承Thread类,实现run方法
    • 4.使用匿名内部类来实现Runnable接口,实现run方法
    • 5.使用 lambda表达式


1、什么是线程

线程是进程中实际执行的最小单位,在一个进程中,可以存在一个或者多个线程,同一个进程中的若干线程之间,是共用相同的内存资源和文件资源,线程是系统调度执行的基本单位
利用线程可以解决进程创建/销毁开销大的问题
线程thread也被称为 “轻量级进程” 创建/销毁开销小
线程比进程更轻量,核心在于创建进程可能要包含多个线程,在这个过程中涉及到资源分配/资源释放,创建线程相当于资源已经有了,省去了资源分配/释放步骤
描述进程,使用的PCB这样的结构体,事实上更严格的说,一个PCB其实描述一个线程,若干个PCB联合在一起,是描述一个进程的

2、进程和线程的区别

1.进程是包含线程的,每一个进程至少有一个线程存在,即主线程
2.进程和线程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间
3.进程是系统分配资源的最小单位,线程是系统调度的最小单位
4.一个进程挂了一般不影响其他进程,但是一个线程挂了,可能把同进程内的其他线程一起带走(整个进程崩溃)

3、多线程的概述

多线程是指在一个程序中同时执行多个线程,每个线程可以独立执行不同的任务或者操作,在Java中,多线程可以让程序更高效的利用计算机的多核处理器,提高程序的性能和响应速度,多个线程之间都是并发执行的

4、在Java中实现多线程的方法

1.继承Thread类

创建一个类继承Thread类,重写里面的run方法,在主函数中用start方法启动,这样就创建了一个线程,在调用start方法之后,系统会自动调用重写的run方法,也就是回调函数,交给系统执行run方法

class MyThread extends Thread {@Overridepublic void run() {while (true) {System.out.println("hello thread");}}
}
public class Test {public static void main(String[] args) {Thread thread = new MyThread();thread.start();while (true) {System.out.println("hello main");}}
}

运行结果:
在这里插入图片描述
在main中有一个线程,我们称为主线程,主线程是自动创建的,而thread线程是我们手动创建的
多线程的调度顺序是无序的,在操作系统内部也称为“抢占式执行”,任何一个线程,在执行到任何一个代码的过程中,都可以被其它线程抢占掉它的cpu资源,于是cpu就给别的下次执行了,
在这里我们还可以使用 jconsole.exe 这个应用程序,来观察这个多线程代码:
在这里插入图片描述
在这里插入图片描述
点击连接,进入页面之后再点击线程就可以了
在这里插入图片描述
上图表示有多少个线程
在这里插入图片描述
上图圈起来的就表示我们创建的两个线程
剩下的线程都是jvm帮我们做的一些其他工作,涉及到的负责垃圾回收,负责记录调试信息等

2.实现Runnable接口

创建一个类实现Runnable接口,并重写run方法

class MyRunnable implements Runnable {@Overridepublic void run() {while (true) {System.out.println("hello thread");}
}
public class Test2 {public static void main(String[] args) {Thread t = new Thread(new MyRunnable());t.start();while (true) {System.out.println("hello main");}}
}

3.使用匿名内部类来继承Thread类,实现run方法

public class Test3 {public static void main(String[] args) {new Thread() {@Overridepublic void run() {while (true) {System.out.println("hello thread");}}}.start();while (true) {System.out.println("hello main");}}
}

4.使用匿名内部类来实现Runnable接口,实现run方法

public class Test4 {public static void main(String[] args) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {while (true) {System.out.println("hello thread");}}});thread.start();while (true) {System.out.println("hello main");            }}
}

5.使用 lambda表达式

public class Test5 {public static void main(String[] args) {Thread thread = new Thread(()-> {while (true) {System.out.println("hello thread");                }});//创建线程 启动线程thread.start();while (true) {System.out.println("hello main");            }}
}

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

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

相关文章

【R语言数据分析】数据类型与数据结构

目录 对数据框的基本操作 创建矩阵 列表 字符串 日期变量与时间变量 缺失值NA 缺失值NA的处理 重新编码 R的数据类型有数值型num,字符型chr,逻辑型logi等等。 R最常处理的数据结构是:向量,数据框,矩阵&#x…

MySQL如何设计库表结构

一、引言 在设计数据库时,表结构的设计是至关重要的。合理的表结构设计不仅可以提高数据库的性能,还可以使数据更加清晰、易于维护。MySQL作为一种流行的关系型数据库管理系统,其表结构设计也遵循一定的原则和最佳实践。本文将介绍MySQL表结…

JAVA第二周学习笔记

文章目录 JAVA第二周学习笔记IDEA方法格式带参数及返回值的方法方法的重载方法的内存 二维数组静态初始化动态初始化 面向对象类和对象如何定义类如何得到对象注意 封装封装的优点private关键字成员变量和局部变量 this关键字构造方法作用类型特点执行时机定义重载 标准javabea…

docker-compose 网络

自定义网络 - HOST 与宿主机共享网络 version: "3" services:web:image: nginx:1.21.6restart: alwaysports:- 80:80network_mode: host自定义网络 - 固定ip version: "3" services:web:image: nginx:1.21.6restart: alwaysports:- 80:80networks:app&am…

目标检测YOLO实战应用案例100讲-基于FPGA的目标检测硬件加速技术及其应用研究(下)

目录 基于异构FPGA的硬件加速器设计及优化 3.1 硬件平台 3.2 系统架构设计

neo4j 的插入速度为什么越来越慢,可能是使用了过多图谱查询操作

文章目录 背景描述分析解决代码参考neo4j 工具类Neo4jDriver知识图谱构建效果GuihuaNeo4jClass 背景描述 使用 tqdm 显示,处理的速度; 笔者使用 py2neo库,调用 neo4j 的API 完成节点插入; 有80万条数据需要插入到neo4j图数据中&am…

企微SCRM:私域流量的高效管理与转化工具

在数字化营销时代,企业微信SCRM(Social Customer Relationship Management,社会化客户关系管理)系统正逐渐成为企业私域流量运营的核心工具。它集客户管理、营销自动化、数据分析等功能于一身,助力企业实现客户关系的精…

C语言中的指针常量和常量指针

指针常量和常量指针是C/C编程语言中两个重要的概念,它们都与指针有关,但具有不同的含义和用途。 1. 指针常量(Pointer to Constant) 指针常量指的是一个指针的值(即它所指向的地址)在初始化之后不能再被改…

FANUC机器人SOCKET断开KAREL程序编写

一、添加一个.KL文件创建编辑断开指令 添加一个KL文件用来创建karel程序中socket断开指令 二、断开连接程序karel代码 PROGRAM SOC_DIS %COMMENT SOCKET断开 %INCLUDE klevccdf VAR str_input,str_val : STRING[20] status,data_type,int_val : INTEGER rel_val : REALBEGING…

【氮化镓】GaN器件在航天器高可靠正向转换器中应用

文章是发表在《IEEE Journal of Emerging and Selected Topics in Power Electronics》2022年10月第10卷第5期上的一篇关于GaN(氮化镓)器件在航天器高可靠性正向转换器中应用的研究。文章的作者是匹兹堡大学电气与计算机工程系的Aidan Phillips, Thomas Cook和Brandon M. Gra…

Android AOSP探索之Ubantu下Toolbox的安装

文章目录 概述安装Toolbox解决运行的问题 概述 由于最近需要进军android的framework,所以需要工具的支持,之前听说江湖上都流传source insight,我去弄了一个破解版,功能确实强大,但是作为多年android开发的我习惯使用android studio。虽然使…

redis核心数据结构——跳表项目设计与实现(跳表结构插入数据、删除数据、展示数据)

数据的插入 首先来看需求 你的任务是实现 SkipList 类中搜索节点和插入节点的成员函数。 插入节点成员函数签名:int insert_element(const K key, const V value) 向跳表中插入一对数据,如果跳表中已存在该键值对,则不做任何操作&#xff…

linux 光驱(光盘)安装

文章目录 自带 YUM 库创建 repo创建文件夹挂载光驱开机自启动挂载安装软件YUM 安装RPM 安装 自带 YUM 库 ls /etc/yum.repos.d创建 repo vim /etc/yum.repo.d/demo.repo // 编写 repo 相关配置 [demo] namedemo baseurlfile:///mnt/cdrom gpkcheck0创建文件夹挂载光驱 /dev/…

Vue中数据双向绑定的原理与流程

目录 引言 一、MVVM 架构 二、数据双向绑定的原理 1.Observer(观察者) 2.Dep(依赖收集器) 3.Watcher(观察者) 三、数据双向绑定的流程 引言 Vue.js 是一个流行的前端 JavaScript 框架,它以…

【沉淀之华】从0到1实现用户推荐 - 实时特征系统构建,包含特征计算,特征存储,特征查询,特征补偿超详细思路分享

文章目录 背景介绍设计初衷基本概念 技术架构"四高"特征存储特征计算特征查询特征补偿 技术难点Q&A彩蛋 背景介绍 设计初衷 作为用户推荐系统的支撑系统之一:用户实时特征系统有着举足轻重的重要,甚至说它是一起推荐行为触发的必要条件。…

objdump 输出格式解析

objdump 输出格式解析 文章主要翻译自https://www.man7.org/linux/man-pages/man1/objdump.1.html,为提高工作效率翻译借助了AI工具,并进行简单修改 一、objdump 选项 1. -t --syms 打印文件的符号表 另外一种常见的输出格式,通常出现在基…

c#word文档:3.向Word文档中插入表格/4.读取Word文档中表格

--向Word文档中插入表格-- (1)在OfficeOperator项目的WordOperator类中定义向Word文档插入换页的函数NewPage (2)在WordOperator类中定义向Word文档插入表格的函数InsertTable using Microsoft.Office.Interop.Word;// 引入Mic…

Ajax从入门到精通

AJAX无刷新交互 目录(单击跳转对应目录) 1.初步认识AJAX............................................................ 1 1.1AJAX原理和优点...................................................... 1 1.2实际使用..................................…

探索APP内测分发的全过程(APP开发)

什么是APP内测分发探索APP内测分发的全过程? APP内测分发是在应用程序开发过程中探索APP内测分发的全过程,开发者将应用程序的测试版或预发布版分发给特定用户进行测试、反馈和评估的一种方式。这是一个非常重要的环节,可以有效地提高应用的…

【右一的实操记录】全导航,持续更新...

文章目录 📚大数据管理与分析【实验】📚数据结构【实验】📚机器学习【实验】📚大数据安全【实验】📚信息检索【实验】📚爬虫【小实践】📚AIGC📚杂货铺 大部分是和电子笔记对应的实验…