JavaEE之多线程编程:1. 基础篇

文章目录

    • 一、关于操作系统
    • 一、认识进程 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(); //线程中的特殊方法,启动一个线程
    }
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

点评项目——分布式锁

2023.12.10 集群模式下的并发安全问题及解决 随着现在分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),通过加锁可以解决在单机情况下的一人一单安全问题,但是在集群模式下就不行了。见下图&#xff1a…

算法Day27 身材管理(三维背包)

身材管理(三维背包) Description Input Output Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt(); // 输入n的值int money sca…

1、混合方式UI设计

1、混合方式UI设计 新建项目添加静态资源添加资源添加action添加菜单菜单栏工具栏中间编辑区域 代码添加其他组件字体和大小状态栏 添加槽函数UI设置的转到槽的手写的设置应用程序图标 代码 新建项目 MainWindow代码文件夹主窗口为 (QMainWindow) 添加静态资源 AppIcon.icoi…

冬日寄快递省钱指南!出门差点冷冷冷冷冷冷傻了……

最近这段时间的天气 可以说令人备受煎熬 真的很喜欢冬天 有种藏在冰窖里的感觉 我理想中的冬天: 火炉、山药、糖炒栗子 实际上的夏天: 上班、挤地铁、爆冷 有一说一 这天气再冷就不合适了吧 现在连出门拿快递 都让人开心不起来了 冬日寒风凛冽…

数据结构与算法-D8D9队列实现及应用

队列:限制在两端进行插入和删除的线性表 允许进行存入操作的一端为“队尾” 允许进行删除操作的一端为“队头” 顺序队列 注意:front指向队头元素的位置 rear指向队尾元素的下一个位置 实现循环队列:(rear1)%N取余,为了区分空…

迅为IMX6UL核心板在便携式医疗设备中的应用方案

在科技日益发展的今天,便携式医疗设备变得越来越受欢迎。这些小巧、轻便的设备,例如IMX6UL核心板,为医疗行业带来了巨大的变革。它们不仅便于携带,而且集成了多种功能,满足了人们对健康管理的各种需求。 便携式医疗设备…

Linux系统---基于Pipe实现一个简单Client-Server system

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、题目要求 Server是一个服务器进程,只能进行整数平方运算。Client要计算一个整数的平方的平方的平方,即…

如何在Linux本地部署openGauss开源数据管理系统并结合内网穿透公网访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

计算机毕业设计 基于Web的网上购物系统(pc端仿淘宝系统)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

3.vue学习笔记(条件渲染+列表渲染+通过key管理状态)

文章目录 1.条件渲染1.1. v-if1.2. v-else-if1.3. v-show1.4. v-if与v-show区别 2.列表渲染2.1. 复杂数据2.2. v-for与对象 3.通过key管理状态 1.条件渲染 在vue中,提供了条件渲染,这类似于JavaScript中的条件语句v-ifv-elsev-else-ifv-show1.1. v-if …

python中tkinter实现GUI程序:三个实例

python中tkinter实现GUI程序 写在最前面Python中使用Tkinter实现GUI程序的基本元素Tkinter简介基本元素1. 根窗口(Root Window)2. 小部件(Widgets)3. 布局管理4. 事件处理 1.用 tkinter实现一个简单的 GUI程序,单击“click”按钮&…

leetcode-21-合并两个有序链表(C语言实现)

题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出…

Linux网络——高级IO

目录 一.五种IO模型 1.阻塞式IO 2.非阻塞式IO 3.信号驱动IO 4.多路转接IO: 5.异步IO 二.同步通信 vs 异步通信 三.设置非阻塞IO 1.阻塞 vs 非阻塞 2.非阻塞IO 3.实现函数SetNoBlock 四.I/O多路转接之select 1.初识select 2.select函数原型 3.socket就绪…

Python 学习笔记之 networkx 使用

介绍 networkx networkx 支持创建简单无向图、有向图和多重图;内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用 networkx 中的 Graph Graph 的定义 Graph 是用点和线来刻画离散事物…

【JAVA基础】----第一天

【JAVA基础】----第一天 命名规则注释方式对HelloWorld代码进行解释常量,进制转换和机器码展现计算过程常量类型1.字符串常量2.整数常量 提供了四种表现形式2.1 二进制2.2 八进制2.3 十进制2.4 十六进制2.5 进制之间的转化2.5.1 其他进制转化为十进制2.5.2 十进制转…

【算法优选】 动态规划之路径问题——贰

文章目录 🎋前言🌲[下降最小路径和](https://leetcode.cn/problems/minimum-path-sum/)🚩题目描述🚩算法思路:🚩代码实现 🎍[最小路径和](https://leetcode.cn/problems/minimum-path-sum/)&…

初识RabbitMQ

一、消息队列 1、消息队列的介绍 在介绍RabbitMQ之前,首先来介绍下消息队列。消息队列是生产者-消费者模型的一个典型的代表,由一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。当新的消息入队时,就会通…

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…

红队攻防实战之Redis-RCE集锦

心若有所向往&#xff0c;何惧道阻且长 Redis写入SSH公钥实现RCE 之前进行端口扫描时发现该机器开着6379&#xff0c;尝试Redis弱口令或未授权访问 尝试进行连接Redis&#xff0c;连接成功&#xff0c;存在未授权访问 尝试写入SSH公钥 设置redis的备份路径 设置保存文件名 …

透析跳跃游戏

关卡名 理解与贪心有关的高频问题 我会了✔️ 内容 1.理解跳跃游戏问题如何判断是否能到达终点 ✔️ 2.如果能到终点&#xff0c;如何确定最少跳跃次数 ✔️ 1. 跳跃游戏 leetCode 55 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。数组中的每个元素代表…