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(); //线程中的特殊方法,启动一个线程
    }
}

【运行结果】

相关推荐
我命由我1234516 小时前
匈牙利命名法
java·服务器·后端·学习·java-ee·kotlin·学习方法
闲猫16 小时前
LangChain / Integrations / Integrations by component / Tool
java·数据库·langchain
小田的博客16 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
牢姐与蒯16 小时前
Linux基本指令及知识点(二)
linux·运维·服务器
去伪存真202517 小时前
数字样机、态势推演与3D汇报场景下的平台选型对比
运维·服务器
合调于形17 小时前
Bianfchheng (Baf) 《边城(八)》全文汉语拼音字母标调实测案例
人工智能·自然语言处理·人机交互·语音识别·学习方法
范什么特西17 小时前
知识总结03
java
空谷有来人17 小时前
Ubuntu22.04安装jdk17,配置环境变量
java·jdk
程序员雷欧18 小时前
ThreadPoolExecutor 深度解析:从核心参数到源码实现的全面剖析
java·开发语言·jvm