JavaEE之多线程编程(一):基础篇

news2024/9/30 5:39:19

文章目录

    • 一、关于操作系统
    • 一、认识进程 process
    • 二、认识线程
    • 三、进程和线程的区别(重点!)
    • 四、Java的线程和操作系统线程的关系
    • 五、第一个多线程编程

一、关于操作系统

在这里插入图片描述

【操作系统】

  • 驱动程序:
    如:我们知道JDBC的驱动程序,就是让JDBC和各个数据厂商的API进行适配。
    由于硬件设备的种类繁多,厂商也各异。所以硬件厂商在开发硬件的同时会提供驱动电脑装了对应的驱动,才能让系统正确识别硬件设备

  • 操作系统内核:
    操作系统的核心功能(管理,对上,对下)。

  • 系统调用:
    操作系统给应用程序提供的API。
    比如:有个程序想操作一下硬件设备,就需要先通过系统调用,把操作命令告诉给系统内核,内核调用驱动程序,进一步的操作硬件设备。

一、认识进程 process

1. 概念
一个运行起来的程序,就是一个“进程”,如果没运行起来,就不算进程,可以叫做“程序”。进程(process)也可以叫做任务(task)。
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

2. 进程控制抽象块(PCB Process Control Block)
计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在Java语言中,我们可以通过 类/对象 来描述这一特征。

// 以下代码是 Java 代码的伪码形式,重在说明,无法直接运行
class PCB {
    // 进程的唯一标识 —— pid;
    // 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
   // 分配给该资源使用的各个资源
    // 进度调度信息(留待下面讲解)
}

这样,每一个PCB对象,就代表者一个实实在在运行着的程序,也就是进程。
操作系统再通过这种数据结构,如:线性表、搜索树等PCB对象组织起来,方便管理时进行增删改查的操作。

二、认识线程

1. 线程是什么?
一个线程就是一个“执行流”,每个线程之间都可以按照顺序执行自己的代码,多个线程之间“同时”执行着多份代码。

2. 为什么要有线程?

(1)“并发编程”成为刚需。

  • 单核CPU的发展遇到了瓶颈,要想提高算力,就需要多核CPU。而并发编程能更充分利用多核CPU资源。
  • 有些任务场景需要“等待IO”,为了让等待IO的时间能够去做一些其他的工作,也需要用到并发编程。

(2)虽然多进程也能实现并发编程,但是线程比进程更轻量。

  • 创建线程比创建进程更快;
  • 销毁线程比销毁进程更快;
  • 调度线程比调度进程更快。

(3)虽然线程比进程轻量,但是人们还不满足,于是有了“线程池” (ThreadPool)和 “协程”(Coroutine)。

三、进程和线程的区别(重点!)

  1. 进程包含线程。每个进程至少有一个线程存在,即主线程。
  2. 进程和进程之间不共享内存空间,同一个进程的线程之间共享一个内存空间。
  3. 进程是系统分配资源的最小单位,线程是系统调度的最小单位。

四、Java的线程和操作系统线程的关系

线程是操作系统中的概念,操作系统内核实现了线程这样的机制,并且对用户提供了一些API供用户使用(例如 Linux 的 pthread库)

五、第一个多线程编程

【代码】

//写一个类,继承自标准库的Thread
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("hello word!");
    }
}
public class ThreadDemo1 {
    public static void main(String[] args) {
        //创建线程,是希望线程成为一个独立的执行流(执行一段代码)
        //创建线程是相当于雇了个人帮我们干活
        Thread t = new MyThread(); //这里就不用new标准库的thread的了,而是刚才创建的子类
        t.start(); //线程中的特殊方法,启动一个线程
    }
}

【运行结果】
在这里插入图片描述

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

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

相关文章

【接口测试】POST请求提交数据的三种方式及Postman实现

1. 什么是POST请求? POST请求是HTPP协议中一种常用的请求方法,它的使用场景是向客户端向服务器提交数据,比如登录、注册、添加等场景。另一种常用的请求方法是GET,它的使用场景是向服务器获取数据。 2. POST请求提交数据的常见编…

笔记-模拟角频率和数字角频率的关系理解

先建议阅读前人此文(点击这里),有助于理解。 模拟频率:f 模拟角频率:Ω 数字角频率:ω 其中:在模拟信号中Ω 2πf 正弦波表示:sin(2πft) sin(Ωt) 数字信号就是离散的&#xff…

Facebook推广工具功能科普!

随着社交媒体的普及,Facebook已经成为全球使用最广泛的社交平台之一,对于广大营销人员来说,利用Facebook推广工具进行营销已经成为不可或缺的一部分。 那么,这些推广工具到底有哪些功能呢?本文将为您揭秘Facebook推广工具的强大…

Pytest 使用及调用方法

使用python -m pytest调用pytest 2.0版本新增 你可以在命令行中通过Python编译器来调用Pytest执行测试: python -m pytest [...] 通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。 可能出现的执行退出code 执行pytest可能…

公众号50个数量怎么操作?

一般可以申请多少个公众号?公众号申请限额在过去几年内的经历了很多变化。对公众号申请限额进行调整是出于多种原因,确保公众号内容的质量和合规性。企业公众号的申请数量从50个到5个最后到2个,对于新媒体公司来说,这导致做不了公…

移动端APP自动化测试框架-UiAutomator2基础

很早以前,我用uiautomatorjava实践过Android APP自动化测试,不过今天要提的不是uiautomator,而是uiautomator2。听起来uiautomator2像是uiautomator的升级版,但是这两款框架仅仅是名字上比较相似,实际上没有任何关联。…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图: 温度传感器原理图: 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图: 模拟量转相应温度公式: CubMx配置: Keil配置&…

深度学习算法:探索人工智能的前沿

目录 引言 第一部分:深度学习的基础 1.1 什么是深度学习? 1.2 神经网络的演化 第二部分:深度学习的关键技术 2.1 卷积神经网络(CNN) 2.2 循环神经网络(RNN) 2.3 长短时记忆网络&#xf…

Vue3集成ThreeJS实现3D效果,threejs+Vite+Vue3+TypeScript 实战课程【一篇文章精通系列】

Vue3集成ThreeJS实现3D效果,threejsViteVue3TypeScript 实战课程【一篇文章精通系列】 项目简介一、项目初始化1、添加一些依赖项 二、创建3D【基础搭建】1、绘制板子,立方体,球体2、材质和光照3、材质和光照和动画4、性能监控5、交互控制6、…

Liunx系统使用超详细(三)

本篇内容开始逐渐描述有关liunx的各种命令的使用方法! 目录 一、目录和文件区别 1.1目录: 1.2文件: 1.3总结: 二、Linux命令的写法 三、linux命令清屏 四、pwd命令 五、ls命令 5.1 ls: 5.2 ls -l&#xff1a…

【C++】异常处理 ⑧ ( 标准异常类 | 标准异常类继承结构 | 常用的标准异常类 | 自定义异常类继承 std::exception 基类 )

文章目录 一、抛出 / 捕获 多个类型异常对象1、标准异常类2、标准异常类继承结构3、常用的标准异常类 二、自定义异常类继承 std::exception 基类1、自定义异常类继承 std::exception 基类2、完整代码示例 - 自定义异常类继承 std::exception 基类 一、抛出 / 捕获 多个类型异常…

茄子科技张韶全:跨多云大数据平台DataCake在OceanBase的实践

11 月 16 日,OceanBase 在北京顺利举办 2023 年度发布会,正式宣布:将持续践行“一体化”产品战略,为关键业务负载打造一体化数据库。其中,在“数字化转型升级实践专场”,我们有幸邀请到了茄子科技大数据技术…

经验分享|MySQL分区实战(RANGE)

概述 分区概述 在 MySQL 中, InnoDB存储引擎长期以来一直支持表空间的概念。在 MySQL 8.0 中,同一个分区表的所有分区必须使用相同的存储引擎。但是,也可以为同一 MySQL 服务器甚至同一数据库中的不同分区表使用不同的存储引擎。 通俗地讲…

锂电池包膜机通过设备管理系统做好预测性维护的作用

在现代工业生产中,包膜机在锂电产业链中处于电池制造环节,是锂电池生产线上的关键设备之一。然而,随着生产规模的扩大和工作环境的复杂化,锂电池包膜机也面临着常见故障和维护需求。为了更好地管理和维护锂电池包膜机,…

Unity 关于SpriteRenderer 和正交相机缩放

float oldWidth 750f;float oldHeight 1334f;float newWidth Screen.width;float newHeight Screen.height;float oldAspect oldWidth / oldHeight;float newAspect newWidth / newHeight;//水平方向缩放float horizontalCompressionRatio newAspect / oldAspect;//垂直…

刷题系列——排序算法

参考:README - 十大经典排序算法 1)排序算法分为内部外部排序两种,这个之前并不了解,外部排序需要访问外存的这个就是指需要额外内存比如另一个list或者dict存储中间结果。 2)稳定性:排序后 2 个相等键值…

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇,基础篇点击:C#基础与进阶扩展合集-基础篇 一、进阶 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、值类型与引用类型 5、程序设置当前项目工作目录 6、获取App.config配置文件中的值 7、Linq常用语句 8、…

三种定时器的实现方式

一、Scheduled Schedule是Spring框架提供的一种简单的定时任务调度方法,通过注解的方式即可实现定时任务的调度。它适用于简单的定时任务需求,例如每隔一段时间执行一次任务或者在特定时间执行任务。Scheduled可以轻松地集成到Spring应用中,…

DeepVoice AI - Text To Voice

No sign-up, No API Keys, no recurr

LabVIEW开发工业设备远程在线状态监测

LabVIEW开发工业设备远程在线状态监测 项目需要减少意外停机和维护费用、提供更完整的机器操作和状态图、改进设备使用情况跟踪。 该解决方案是一个多节点(即多站点)远程监控系统,它利用了基于NI cRIO的控制器和定制的LabVIEW监测软件。 方…