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

如何简单的去使用jconsloe 查看线程 (多线程编程篇1)

目录

 前言

1.进程和线程

进程

PCB 的作用

并发编程和并行编程

线程

为什么选择多线程编程

2.在IDEA中如何简单创建一个线程 

1. 通过继承Thread类

2. 通过实现 Runnable 接口

3. 使用 Lambda 表达式

3.如何简单使用jconsloe去查看创建好的线程

 前言

2025来了,这是第一篇博客,算是笔者的学习笔记吧,供和我一样的初学读者参考学习,愿我们一同进步!

本篇博客大致简单地讨论如下内容:

1.什么是线程,什么是进程?

2.在IDEA中如何简单创建一个线程

3.如何简单使用jconsloe去查看创建好的线程

如果对您有帮助,希望您可以点赞收藏,如果您发现有错误的地方请私信笔者,核实无误后笔者将给予报酬,也欢迎大佬在评论区中对博客内容补充说明,鄙人将一并感激并给予报酬.

1.进程和线程

进程

首先是进程,在笔者的理解中,进程可以简单形容为‘正在运行中的程序’。操作系统通过创建和管理进程来分配和控制硬件资源,确保每个进程能够独立地执行并共享计算机的资源.

这里我们引入一个概念——"pcb".  即进程控制块,是操作系统用于管理进程的一个数据结构。它保存了关于进程的重要信息,使得操作系统能够有效地管理和调度进程。每个进程在创建时,操作系统都会为其分配一个 PCB,并在进程的生命周期内持续维护它。

按照笔者的理解,pcb中有许多属性,存储了进程的信息,操作系统也通过pcb来管理我们的进程

PCB的具体作用如下

PCB 的作用

  1. 存储进程状态

    • PCB 保存了进程的状态信息(如运行中、就绪、阻塞等),帮助操作系统了解进程的当前执行状态。
    • 进程的状态变化(如从就绪状态到运行状态)时,操作系统会更新 PCB。
  2. 保存程序计数器

    • 程序计数器(Program Counter)保存了进程下一条将要执行的指令的地址。每次进程被切换时,操作系统会保存当前进程的程序计数器,并恢复下一个进程的程序计数器。
  3. 保存CPU寄存器内容(与2合称为上下文)

    • 当进程被暂停时,CPU 寄存器中的数据(如通用寄存器、堆栈指针等)会被保存到 PCB 中。下次该进程被调度时,操作系统会恢复这些寄存器内容,确保进程从上次暂停的地方继续执行。
  4. 存储内存管理信息

    • PCB 包含与进程地址空间相关的信息,如进程的内存分配、页表信息等。它帮助操作系统进行内存管理,确保进程在自己的地址空间内运行,并避免不同进程之间的内存冲突。
  5. 存储进程调度信息(优先级)

    • PCB 中保存了调度信息(如优先级、调度策略等),这些信息用于进程的调度和优先级判断,帮助操作系统决定哪个进程在何时被调度执行。
  6. 保存进程标识符(PID)

    • 每个进程都有一个唯一的进程标识符(PID)。操作系统通过 PID 来识别不同的进程。PCB 中包含了进程的 PID。
  7. 记录进程的资源使用情况(记账信息)

    • PCB 中还保存了进程所拥有的资源信息,比如文件描述符、I/O 设备等资源。这些信息对操作系统在资源分配和回收时非常重要。

以上就是笔者对于进程的简单介绍,欢迎大家的来纠正和补充

并发编程和并行编程

在介绍线程之前,简单介绍一下并发,并行编程

简单来说,假如两个进程在cpu的两个核心上同时执行, 就叫并行.

如果一个核心需要执行这两个进程,就通过轮转来在短时间内交替执行, 操作系统通过pcb中的"优先级","进程状态","记账信息"等属性来分配资源,这就是并发编程.

并发编程的目的是提高程序的效率,特别是在处理多个任务时。它不要求任务必须在物理上完全同时进行,而是关注如何在合理的时间内调度多个任务,让它们看起来像是在并行执行。

我的老师告诉我,宏观上这俩差别不大,统一用"并发"来称呼

线程

按照笔者学习的知识介绍:

一个线程就是一个 " 执行流 ". 每个线程之间都可以按照顺讯执行自己的代码 . 多个线程之间 " 同时 " 执行着多份代码, 在一个进程中,至少有一个线程.

为什么选择多线程编程

但是我们为什么需要多线程编程而不是多进程编程呢?
首先就是,"并发编程"成为了刚需,能更好的利用多核心cpu的资源
但是比起多进程编程,多线程编程更加轻量.
因为不管是创建一个进程,调度一个进程,销毁一个进程,都需要消耗更多的时间,光是去给这些进程分配内存空间,就已经是一个大活了
而线程依附于进程,但是每一个线程都可以独立的去工作,每一个线程也有 "上下文","记账信息","状态"等属性,当一个进程有多个线程时,它就有多个pcb,每个线程有一个pcb.
上述材料我们可以得出两个结论
一:每个线程可以独立的去cpu上调度执行
二:同一个进程的线程们共用一套内存空间和文件资源
每一个进程好比一个厂房,每一个线程就好比厂房里的生产线!
所以,这就是多线程编程的好处

2.在IDEA中如何简单创建一个线程 

线程是操作系统中的概念 . 操作系统内核实现了线程这样的机制 , 并且对用户层提供了一些 API 供用户使 用( 例如 Linux pthread ).
Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装 .
在 Java 中,创建线程的方式有很多种,常见的有以下几种:

1. 通过继承Thread类

class MyThread extends Thread {@Overridepublic void run() {while (true) {System.out.println("Thread is running");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class Demo {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();  // 启动线程}
}

2. 通过实现 Runnable 接口

class MyRunnable implements Runnable {@Overridepublic void run() {while (true) {System.out.println("Thread is running");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class Demo {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();  // 启动线程}
}

3. 使用 Lambda 表达式

    Thread y = new Thread(() -> {while (true){System.out.println("one Thread");try {Thread.sleep(1000);} catch (InterruptedException e){e.printStackTrace();throw new RuntimeException(e);}}},"线程一"); // lambda 表达式写法
//        y.setDaemon(true); // 设置为后台线程y.start(); // 启动线程

3.如何简单使用jconsloe去查看创建好的线程

JConsole 是一个 Java 监控工具,用于监控 Java 应用程序的运行时性能,它能够提供线程、内存、垃圾回收等信息。通过 JConsole,我们可以查看程序的线程状态、CPU 使用情况等,有助于调试和优化程序。

我们可以在JDK中找到它,如图

示例代码 

public class demo2
{public static void main(String[] args) throws InterruptedException {
//        Thread t = new MyThread();
//        t.start();Runnable runnable = new MyRun();Thread t = new Thread(runnable);
//        t.start();Thread y = new Thread(() -> {while (true) {System.out.println("one Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();throw new RuntimeException(e);}}}, "线程一"); // lambda 表达式写法
//        y.setDaemon(true); // 设置为后台线程y.start(); // 启动线程while (true) {System.out.println("soyo");Thread.sleep(1000);}}}

打开jconsloe 

即可查看

结尾 

博客的内容就到这,这不是随便水的,好歹结合了笔者自己的思考,希望有人能看到这里吧,我会很感谢的!

相关文章:

如何简单的去使用jconsloe 查看线程 (多线程编程篇1)

目录 前言 1.进程和线程 进程 PCB 的作用 并发编程和并行编程 线程 为什么选择多线程编程 2.在IDEA中如何简单创建一个线程 1. 通过继承Thread类 2. 通过实现 Runnable 接口 3. 使用 Lambda 表达式 3.如何简单使用jconsloe去查看创建好的线程 前言 2025来了,这是第…...

python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件(openpyxl库)三、 处理 Word 文件(python-docx库)四、 处理 PPT 文件(python-pptx库)五、 自动发送邮件(smtplib和…...

DeepSeek教unity------Dotween

1、命名法 Tweener(补间器):一种控制某个值并对其进行动画处理的补间。 Sequence(序列):一种特殊的补间,它不直接控制某个值,而是控制其他补间并将它们作为一个组进行动画处理。 Tw…...

前端开发中关于虚拟列表的实现与应用优化

前端开发中关于虚拟列表的实现与应用优化 一、引言 在前端开发的日常工作中,我们常常会遇到需要展示大量数据列表的场景。比如电商平台的商品列表、社交平台的动态信息流等。当数据量庞大时,直接渲染所有数据会导致页面性能急剧下降,出现卡…...

图解JVM-1. JVM与Java体系结构

一、前言 在 Java 开发的广袤天地里,不少开发者都遭遇过令人头疼的状况。线上系统毫无征兆地卡死,陷入无法访问的僵局,甚至直接触发 OOM(OutOfMemoryError,内存溢出错误);面对 JVM 的 GC&#…...

Word中的文档信息域

Word中的文档信息域 DocProperty包含文档信息的多个属性, 也可以自定义属性. 查看文档预定义的自定义属性 【文件】→【信息】→【属性】→【高级属性】 参考链接 WORD中文档属性域DocProperty的应用-CSDN博客 第06套 Word_哔哩哔哩_bilibili...

Linux中的权限问题(二)

一、不受权限约束的root 按照文件的使用者进行匹配后,即使权限是“---” root依旧可以正常进行读,写,运行 二、文件拥有者和所属组的更改方法以及限制 2.1chown:更改文件拥有者以及所属组 ①可以单独修改文件拥有者 chown[更…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十八节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析(ResponseOnEvent_0x86服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x86服务、事件响应、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x86…...

Spring Boot自动装配:约定大于配置的魔法解密

#### 一、自动装配的哲学思考 在传统Spring应用中,开发者需要手动配置大量的XML或JavaConfig。Spring Boot通过自动装配机制实现了**约定大于配置**的设计理念,其核心思想可以概括为: 1. **智能预设**:基于类路径检测自动配置 2…...

[笔记.AI]大模型的蒸馏、剪枝、量化 | 模型压缩 | 作用与意义

上周简单整理了《deepseek-r1的不同版本(满血版、蒸馏版、量化)》,这次继续完善对其的认知——补充“剪枝”,并进一步整理蒸馏、剪枝、量化的作用与意义。 以下摘自与DeepSeek-R1在线联网版的对话 蒸馏、剪枝、量化是当前主流的三…...

【koa】05-koa+mysql实现数据库集成:连接和增删改查

前言 前面我们已经介绍了第二阶段的第1-4点内容,本篇介绍第5点内容:数据库集成(koamysql) 也是第二阶段内容的完结。 一、学习目标 在koa项目中正常连接数据库,对数据表进行增删改查的操作。 二、操作步骤 本篇文章…...

【数据结构】队列(Queue)

Queue 定义 Java中的队列(Queue)是一种先进先出(FIFO)的数据结构。队列只允许在一段进行插入数据操作,称为入队,在另一端进行删除数据操作,称为出队。我们可以把队列形象看作为排队。在最前面的进行出队,从最后面进行入队。 队列…...

机器学习PCA和LDA

主成分分析(PCA, Principal Component Analysis)和线性判别分析(LDA, Linear Discriminant Analysis)是两种常用的降维方法,它们虽然都用于数据降维,但核心思想和应用场景不同。 PCA(主成分分析…...

RocketMQ - 常见问题

RocketMQ常见问题 文章目录 RocketMQ常见问题一:消息幂等问题1:什么是消费幂等2:消息重复的场景分析2.1:发送时消息重复2.2:消费时消息重复2.3:Rebalance时消息重复 3:通用解决方案3.1&#xff…...

kafka消费能力压测:使用官方工具

背景 在之前的业务场景中,我们发现Kafka的实际消费能力远低于预期。尽管我们使用了kafka-go组件并进行了相关测试,测试情况见《kafka-go:性能测试》这篇文章。但并未能准确找出消费能力低下的原因。 我们曾怀疑这可能是由我的电脑网络带宽问题或Kafka部…...

基于Spring Boot的社区居民健康管理平台的设计与实现

目录 1 绪论 1.1 研究现状 1.2 研究意义 1.3 组织结构 2 技术介绍 2.1 平台开发工具和环境 2.2 Vue介绍 2.3 Spring Boot 2.4 MyBatis 2.5 环境搭建 3 系统需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用例图 3.4 系统功能图 4 系统设计 4.1 系统总体描…...

网络安全架构战略 网络安全体系结构

本节书摘来自异步社区《网络安全体系结构》一书中的第1章,第1.4节,作者【美】Sean Convery 1.4 一切皆为目标 网络安全体系结构 当前的大型网络存在着惊人的相互依赖性,作为一名网络安全设计师,对这一点必须心知肚明。Internet就…...

【Spring+MyBatis】_图书管理系统(中篇)

【SpringMyBatis】_图书管理系统(上篇)-CSDN博客文章浏览阅读654次,点赞4次,收藏7次。(1)当前页的内容records(类型为List);参数:userNameadmin&&pas…...

Python - 爬虫利器 - BeautifulSoup4常用 API

文章目录 前言BeautifulSoup4 简介主要特点:安装方式: 常用 API1. 创建 BeautifulSoup 对象2. 查找标签find(): 返回匹配的第一个元素find_all(): 返回所有匹配的元素列表select_one() & select(): CSS 选择器 3. 访问标签内容text 属性: 获取标签内纯文本get_t…...

宝塔面板开始ssl后,使用域名访问不了后台管理

宝塔面板后台开启ssl访问后,用的证书是其他第三方颁发的证书 再使用 域名/xxx 的形式:https://域名:xxx/xxx 访问后台,结果出现如下,不管使用 http 还是 https 的路径访问都进不后台管理 这个时候可以使用 https://ip/xxx 的方式来…...

ARM异常处理机制与虚拟化陷阱控制详解

1. ARM异常处理机制概述在ARMv8/v9架构中,异常处理是处理器执行流控制的核心机制。当发生非法指令、特权级违规或硬件错误时,处理器会通过异常向量表跳转到对应的处理程序。异常处理机制的设计直接影响操作系统的稳定性和虚拟化方案的效率。异常处理的核…...

NI实时机(PXI)从裸机到联调:RT Linux系统安装与上电自启配置全流程

NI实时机(PXI)从裸机到联调:RT Linux系统安装与上电自启配置全流程 当一台崭新的NI PXI实时机从包装箱中取出时,它就像一块未经雕琢的璞玉——硬件性能强劲却缺乏灵魂。作为硬件在环(HIL)测试系统的核心&am…...

匿名管道实例

说明:这段代码实现了**父子进程通过管道进行进程间通信(IPC)**的功能 核心功能流程: 参数验证 - 检查是否提供了命令行参数 创建管道 - 使用 pipe() 创建一条匿名管道 pipefd[0] 用于读取pipefd[1] 用于写入 创建子进程 - 使用 fork() 创建子进程 子…...

深入理解Linux内核机制

深入理解Linux内核机制 Linux内核作为操作系统的核心,其设计思想与实现机制一直是开发者与系统工程师关注的焦点。它不仅驱动着全球数以亿计的服务器、嵌入式设备和移动终端,更以其开源特性成为技术探索的沃土。深入理解Linux内核机制,不仅能…...

OmenSuperHub终极指南:完全掌握暗影精灵硬件控制

OmenSuperHub终极指南:完全掌握暗影精灵硬件控制 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否厌倦了原厂Omen Gaming Hub的臃肿和广告…...

别再为Electron webview通信发愁了!手把手教你用postMessage搞定双向传值(附React/Vue示例)

Electron webview通信实战:用postMessage构建高效双向通道 如果你正在Electron项目中集成第三方网页或独立模块,webview的通信问题一定让你头疼过。那种"看得见却摸不着"的隔离感,就像隔着玻璃对话——明明两个页面近在咫尺&#x…...

数据中心RDMA网络实战:手把手教你配置PFC和ECN,搞定RoCEv2零丢包

数据中心RDMA网络实战:PFC与ECN配置全指南 当你在深夜盯着监控屏幕上突然跳红的RDMA性能指标时,那种焦虑感我深有体会。去年某金融客户的核心交易系统就曾因RoCEv2网络突发拥塞,导致NVMe over Fabrics存储延迟从200μs飙升到15ms——这足以让…...

5步快速上手DeepLabV3Plus:从零开始的语义分割实战教程

5步快速上手DeepLabV3Plus:从零开始的语义分割实战教程 【免费下载链接】DeepLabV3Plus-Pytorch Pretrained DeepLabv3 and DeepLabv3 for Pascal VOC & Cityscapes 项目地址: https://gitcode.com/gh_mirrors/de/DeepLabV3Plus-Pytorch 你是否想快速掌握…...

JupyterLab Desktop 终极指南:从零开始掌握数据科学桌面神器 [特殊字符]

JupyterLab Desktop 终极指南:从零开始掌握数据科学桌面神器 🚀 【免费下载链接】jupyterlab-desktop JupyterLab desktop application, based on Electron. 项目地址: https://gitcode.com/gh_mirrors/ju/jupyterlab-desktop 想要在本地轻松运行…...

基因编辑分析:CRISPR实验的数据处理流程

基因编辑技术正以前所未有的速度改变生命科学研究,其中CRISPR-Cas9系统因其高效性和精准性成为核心工具。实验成功的关键不仅在于操作技术,更依赖于对海量数据的科学处理。本文将系统解析CRISPR实验的数据处理流程,帮助研究者从原始数据中挖掘…...