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

文章目录

一、关于操作系统

【操作系统】

  • 驱动程序:

    如:我们知道JDBC的驱动程序,就是让JDBC和各个数据厂商的API进行适配。

    由于硬件设备的种类繁多,厂商也各异。所以硬件厂商在开发硬件 的同时会提供驱动电脑装了对应的驱动,才能让系统正确识别硬件设备

  • 操作系统内核:

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

  • 系统调用:

    操作系统给应用程序提供的API。

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

一、认识进程 process

1. 概念

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

2. 进程控制抽象块(PCB Process Control Block)

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

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库)

五、第一个多线程编程

【代码】

java 复制代码
//写一个类,继承自标准库的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(); //线程中的特殊方法,启动一个线程
    }
}

【运行结果】

相关推荐
冰河团队4 小时前
一个拉胯的分库分表方案有多绝望?整个部门都在救火!
java·高并发·分布式数据库·分库分表·高性能
杨云龙UP4 小时前
从0到1快速学会Linux操作系统(基础),这一篇就够了!
linux·运维·服务器·学习·ubuntu·centos·ssh
洛_尘4 小时前
Java EE进阶:Linux的基本使用
java·java-ee
Dovis(誓平步青云)4 小时前
《Linux 信号入门:搞懂 “进程通信的紧急电话” 到底怎么用(初篇)》
linux·运维·服务器
宸津-代码粉碎机4 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
MaCa .BaKa4 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
木子欢儿4 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y4 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
蜡台4 小时前
IDEA 一些 使用配置和插件
java·ide·intellij-idea
autumn20055 小时前
Flutter 框架跨平台鸿蒙开发 - 历史人物对话
服务器·flutter·华为·harmonyos