如何简单的去使用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 

即可查看

结尾 

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

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

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

相关文章

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase04 作者:车端域控测试工程师 更新日期:2025年02月17日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-004测试用例 用例ID测试场景验证要点参考条款预期结果TC…

3.10 实战Hugging Face Transformers:从文本分类到模型部署全流程

实战Hugging Face Transformers:从文本分类到模型部署全流程 一、文本分类实战:IMDB电影评论情感分析 1.1 数据准备与预处理 from datasets import load_dataset from transformers import AutoTokenizer # 加载IMDB数据集 dataset = load_dataset("imdb") …

【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 特征工程是机器学习流程中至关重要的一步,它直接影响模型的性能。然而,手动特征工程既耗时又需要领域专业知识。Featuretools是一个强大的…

MybaitsPlus学习笔记(二)基本CURD

目录 一、BaseMapper 二、常用实例 1、插入 2、删除 3、修改 4、查询 三、IService 四、 IService中的一些方法测试 一、BaseMapper MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用,接口如 下: publ…

设计模式之适配模式是什么?以及在Spring AOP中的拦截器链的使用源码解析。

前言 本文涉及到适配模式的基本用法,以及在Spring AOP中如何使用,首先需要了解适配模式的工作原理,然后结合Spring AOP的具体实现来详细详细解析源码。 首先,适配模式,也就是Adapter Pattern,属于结构型设计…

【C++】36.C++IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4. stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。pri…

JavaScript表单介绍

一、表单的基本概念 在网页开发里&#xff0c;表单是实现用户与网页交互的关键组件&#xff0c;用于收集用户输入的数据&#xff0c;JavaScript 则能为表单增添强大的交互性和功能性。表单在 HTML 里通过 <form> 标签创建&#xff0c;包含多种表单元素&#xff0c;如文本…

哈希表(C语言版)

文章目录 哈希表原理实现(无自动扩容功能)代码运行结果 分析应用 哈希表 如何统计一段文本中&#xff0c;小写字母出现的次数? 显然&#xff0c;我们可以用数组 int table[26] 来存储每个小写字母出现的次数&#xff0c;而且这样处理&#xff0c;效率奇高。假如我们想知道字…

昆虫-目标检测数据集(包括VOC格式、YOLO格式)

昆虫-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接: https://pan.baidu.com/s/1tYb8s-AVJgSp7SGvqdWF9A?pwdt76a 提取码: t76a 数据集信息介绍&#xff1a; 共有 6009 张图像和一一对应的标注文件 标注文件格式提供了两种&#x…

C++(23):unreachable

C++23在头文件 "><utility>定义了std::unreachable(),用于指示编译器,该段代码不应该被允许,因此编译器可以对该位置进行优化,如果一旦允许了该位置的代码,行为未定义: #include <utility> #include <iostream>using namespace std;int func(…

备战蓝桥杯 Day1 回顾语言基础

开启蓝桥杯刷题之路 Day1 回顾语言基础 1.配置dev 工具->编译选项->勾选编译时加入以下命令->设定编译器配置(release和debug)都要-> -stdc11 ->代码生成/优化->代码生成/优化->语言标准(-std)->ISO C11 ->代码警告->显示最多警告信息(-Wall)…

python学opencv|读取图像(七十五)人脸识别:Fisherfaces算法和LBPH算法

【1】引言 前序学习进程中&#xff0c;已经掌握了使用Eigenfaces算法进行的人脸识别。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;七十四&#xff09;人脸识别&#xff1a;EigenFaces算法-CSDN博客 在此基础上&#xff0c;学习剩余两种人脸识别算法&am…

React 前端框架介绍

什么是 React&#xff1f; React 是一个由 Facebook 开发并维护的开源 JavaScript 库&#xff0c;用于构建用户界面。它主要用于创建交互式用户界Face&#xff08;UI&#xff09;&#xff0c;尤其是当数据变化时需要更新部分视图时非常有效。React 的核心思想是组件化和声明性…

包装类的空指针异常

问题&#xff1a; Integer是引用对象&#xff0c;当初始化不进行赋值的时候是null,是null就不可以自动拆箱 实践&#xff1a; public class Test {public static void main(String[] args) {Integer num null;//自动拆箱int i num;} } 会包异常信息&#xff1a; Excepti…

【Elasticsearch】检索选定字段(Retrieve selected fields)

在 Elasticsearch 中&#xff0c;检索选定字段&#xff08;Retrieve selected fields&#xff09;是一个重要的功能&#xff0c;用于优化查询性能和减少数据传输量。以下是结合所有回答的详细总结&#xff0c;涵盖每种字段检索方式的原理、应用场景、性能特点以及限制。 1._so…

【MySQL】 基本查询(下)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 基本查询(下) 发布时间&#xff1a;2025.2.18 隶属专栏&#xff1a;MySQL 目录 Update语法案例 Delete删除数据语法案例 截断表语法案例 插入查询结果语法案例 聚合函数函数介绍案例 group by子句的使用语…

docker 基础命令使用(ubuntu)

docker 状态查询 docker ps docker ps -adocker --version docker info docker --help docker run --help docker ps --help ...docker 操作镜像命令 docker imagesdocker rmi 镜像id/镜像名docker 操作容器命令 docker ps docker ps -adocker run 命令 # 端口映射 -p 参数…

idea 2023.3.7常用插件

idea 2023.3.7常用插件 文档 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2023.3.7常用插件 插件名称插件版本说明1AceJump3.5.9AceJump允许您快速将插入符号导航到编辑器中可见的任何位置。只需按“ctrl&#xff1b;”&#xff0c;键入一个字符&#xff0c;然后在Ace …

基于Flask的广西高校舆情分析系统的设计与实现

【Flask】基于Flask的广西高校舆情分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统综合运用Python、Flask框架及多种数据处理与可视化工具开发&#xff0c;结合Boot…

用什么办法能实现ubuntu里面运行的自己开发的python程序能自动升级。

要实现Ubuntu中自己开发的Python程序自动升级&#xff0c;可以通过以下几种方式&#xff1a; 1. 使用 Git 仓库 定时任务 如果你的Python程序托管在Git仓库中&#xff0c;可以通过定时拉取最新代码来实现自动升级。 步骤&#xff1a; 确保Python程序在Git仓库中。在Ubuntu上…