【Java EE初阶】计算机简介及多线程之创建线程

news2024/11/27 18:40:17

目录

1.计算机发展史

 2.冯诺依曼体系

 3.操作系统

操作系统的作用:

 4.进程

1.PID(进程编号)

2.内存指针 应用程序申请到的内存中的首地址

3.文件描述符表

问:什么是并发?什么是并行?

4.进程的优先级(谁使用CPU的频率多)

 5.进程的状态

6上下文件信息 7.记账信息

5.虚拟内存空间

6.mmu 

7.多线程 

1.概念

问:进程和线程的区别?

使用多线程编程的原因 ?

2.多线程可能存在的问题 

8.第一个线程程序

1.创建线程方法一继承Thread类

1.继承Thread类

2.重写run()方法 

3.调用start()方法执行线程

2.第一个线程执行结果

 3.创建线程方法二实现Runnable接口并重写run()

 4.创建线程方法三通过匿名内部类

 5.创建线程方法四使用Lambda表达式

9.使用Runnable定义任务的好处

10.查看线程及状态


1.计算机发展史

 2.冯诺依曼体系

运算器:执行具体的CPU指令

控制器:调度的角色,负责告诉CPU执行哪些指令

存储器:寄存器,内存,外存

                速度越来越慢,容量越来越大,造假越来越低

输入设备:键盘,鼠标

输出设备:显示器,音箱

 计算机最重要的就是CPU,CPU干的活就是执行指令

 3.操作系统

操作系统的作用:

1.向上为应用程序提供一个稳定的运行环境

2.向下管理着所有的计算机设置

3.为用户提供一个人机交互界面

 4.进程

每一个运行起来的软件,操作系统都会以进程的形式将他管理起来

在操作系统中,每一个进程都被描述成一个进程控制块(PCB)

1.PID(进程编号)

2.内存指针 应用程序申请到的内存中的首地址

3.文件描述符表

一个内核有两个处理器,一个处理器可以运行一个指令

所以单核并不是同时运行的 ,而是以飞速轮动的方式在不同的进程之间来回调度,看似同时运行,但实际上不是

根据优先级来 

在一个处理器上横向的轮动称作并发,纵向的多核处理器称作并行

问:什么是并发?什么是并行?

以吃饭和接电话为例:

吃完饭才能接电话,称作串行

吃饭途中放下碗筷去接电话,称作并发

边吃饭边接电话,称作并行

4.进程的优先级(谁使用CPU的频率多)

 5.进程的状态

6上下文件信息 7.记账信息

记录了当前进程执行到了那里,下次直接从这里开始即可

5.虚拟内存空间

进程启动之后就会申请内存空间

 

 所以我们提出了虚拟内存地址

6.mmu 

7.多线程 

1.概念

多线程用来处理一个很复杂或者很大的任务

问:进程和线程的区别?

对于一个进程而言,必然会有一条线程(主线程) 

进程是申请系统资源的最小单位

线程CPU调度的最小单位

进程之间互不影响,线程之间可以相互影影响

使用多线程编程的原因 ?

2.多线程可能存在的问题 

1.当线程增加到一定程度时,不但没有提高效率,反而会给CPU调度带来负担

    在真实程序中,确定线程的数据要经过测试

2.多线程之间资源争抢,会出现一些线程不安全的问题

8.第一个线程程序

1.创建线程方法一继承Thread类

通过JDK给我们提供的API来创建线程

这个线程时Java中的类,不是系统中真正的PCB

1.继承Thread类

2.重写run()方法 

让线程执行指定的任务

class MyThread01 extends Thread {
    @Override
    public void run() {
        while (true) {
            System.out.println("线程执行的任务");
            //休眠
            try {
                Thread.sleep(1000);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

3.调用start()方法执行线程

通知操作系统CPU调度

 

public class Demo02 {
    public static void main(String[] args) {
        //创建线程对象
        MyThread01 myThread01 = new MyThread01();
        myThread01.start();

        //
        while (true) {
            System.out.println("main方法中的线程");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

Thread.sleep(1000)的意思是保证在1000ms之内这个线程不被调度到CPU上执行

2.第一个线程执行结果

 

 3.创建线程方法二实现Runnable接口并重写run()

 

public class Demo03 {
    public static void main(String[] args) {
        //创建Runnable对象
         MyRunnable myRunnable = new MyRunnable();
        //创建线程传入Runnable对象
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

class MyRunnable implements Runnable{
    @Override
    public void run() {
        while (true) {
            System.out.println("生产皮包,金币+10010");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 4.创建线程方法三通过匿名内部类

public class Demo04 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("runnable 的线程");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        Thread t2 = new Thread() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("thread 的线程");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t1.start();
        t2.start();
    }
}

 5.创建线程方法四使用Lambda表达式

public class Demo05 {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            while (true) {
                System.out.println("lambda 定义的线程");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        );
        t1.start();
    }
}

9.使用Runnable定义任务的好处

以张三的工厂为例

 

10.查看线程及状态

 

 

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

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

相关文章

Tomcat8和Tomcat9乱码问题

今天新开了一个小项目,我丢,乱码了,咋回事,好久没遇到过了,都忘了咋回事。今天必须记录下来,避免继续踩坑 Tomcat 8 不需要进行任何配置即可,它默认的是GBK,而win10 win7 默认的也是…

[Data structure]单链表 | 一文介绍线性数据结构之一的单链表(Java实现)

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐如果觉得文章写的不错,欢迎点个关注一…

R语言 | 数据框

目录 一、认识数据框 7.1 建立第一个数据框 7.2 验证与设定数据框的列名和行名 二、认识数据框的结构 三、获取数据框内容 3.1 一般获取 3.2 特殊字符$ 3.3 再看取得的数据 四、使用rbind()函数增加数据框的行数据 五、使用cbind()函数增加数据框的列数据 5.1 使用$符号…

《LearnUE——基础指南:开篇—3》——基础概念

目录 程序之祖——HellowWorld 0.3.1 创建HellowWorld工程 0.3.2编译类型 0.3.3 平台支持 0.3.4 命名约定 程序之祖——HellowWorld 0.3.1 创建HellowWorld工程 接上文准备工作完成之后,双击运行Unreal Engine快捷图标,或者双击生成的UE4Editor.exe…

【计算机图形学】图形变换(以任意直线为对称轴的对称变换)

模块3-2 图形变换 一 实验目的 编写图形各种变换的算法 二 实验内容 1:任意直线的对称变换。要求将变换矩阵写在实验报告中,并与代码匹配。求对任意直线AxByC0的对称变换矩阵。 实验结果如下图所示: 1:预设图形初始化 2&#…

数据结构与算法(小议递归二)

文章目录 前言一、例二二、为什么总结 前言 前面说到了递归在裴波那契数列计算中并不怎么适用,那么它适合什么样的场景呢? 我们继续举例和python3对比测试来说明。 一、例二 下面我们试试阶乘,在前面的代码上稍稍改一下就可以了&#xff1a…

ApachePOI操作Excel快速入门使用

简介 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,主要任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式&#xff0…

【Java笔试强训 3】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥最长的…

能用OpenCV做的15大计算机视觉任务

使用OpenCV,你几乎可以完成你能想到的每种计算机视觉任务。现实生活中的问题要求同时使用许多计算机视觉算法和模块来获得所需的结果。因此,你只需了解要用哪些OpenCV模块和函数来获得你想要的东西。 让我们来看看OpenCV中可以开箱即用的功能。 1 内置…

跨平台Office文档预览原生插件,非腾讯X5,支持离线,稳定高可用

引言 2023年4月13日零时起&#xff0c;腾讯浏览服务内核文档能力正式下线&#xff0c;要实现真正离线文档预览&#xff0c;于是有了这边文章。 前面写了多篇关于<跨平台文件在线预览解决方案>&#xff0c;不管使用pdf.js、LibreOffice&#xff0c;还是永中DCS&#xff…

JAVA设计模式之观察者模式( 通俗易懂的代码讲解 )

简述&#xff1a;Java的观察者模式是一种设计模式&#xff0c;它定义了一种对象间的一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都能够得到收到消息通知。在这种模式中&#xff0c;被观察者维护了一个观察者列表&#xff0c;并…

深入浅出 Compose Compiler(1) Kotlin Compiler KCP

前言 Compose 的语法简洁、代码效率非常高&#xff0c;这主要得益于 Compose Compiler 的一系列编译期魔法&#xff0c;帮开发者生成了很多样板代码。但编译期插桩也阻碍了我们对于 Compose 运行原理的认知&#xff0c;想要真正读懂 Compose 就必须先了解它的 Compiler。本系列…

前端系列11集-ES6 知识总结

ES Module 优点 静态分析 浏览器和 Node 都支持 浏览器的新 API 能用模块格式提供 不再需要对象作为命名空间 export 用于规定模块的对外接口 输出的接口与其对应的值是动态绑定关系可以取到模块内部实时的值 import 用于输入其他模块提供的功能 具有提升效果&#xff0c;会提升…

刷题4.28

1、 开闭原则软件实体&#xff08;模块&#xff0c;类&#xff0c;方法等&#xff09;应该对扩展开放&#xff0c;对修改关闭&#xff0c;即在设计一个软件系统模块&#xff08;类&#xff0c;方法&#xff09;的时候&#xff0c;应该可以在不修改原有的模块&#xff08;修改关…

服务注册与发现-Consul(Linux)

本文要有docker支持&#xff0c;docker的安装使用Docker 在Linux-CentOS上的安装使用_XiaoGuaiSs的博客-CSDN博客如果提示 [Warning] IPv4 forwarding is disabled. Networking will not work.然后将项目拷贝至linux 的project目录下&#xff08;随意&#xff09;。生成项目镜像…

Node第三方包 【Request】

文章目录 &#x1f31f;前言&#x1f31f;Request&#x1f31f;安装与使用&#x1f31f;流&#xff08;stream&#xff09;操作&#x1f31f;Form表单&#x1f31f;application/x-www-form-urlencoded (URL编码的Form)&#x1f31f;multipart/form-data (Multipart Form 上传) …

百度地图采集经纬度坐标数据定位的javascript实战开发(地理坐标拾取系统、地址定位点选插件、实时定位、数据导入、地理编码、位置纠偏)

坐标采集 前言1.百度地图地理坐标拾取系统2.位置选择插件百度地图经纬度选择插件默认参数配置 3.数据导入4.地理编码爬取百度webAPI返回参数前端封装转换函数 5.手机GPS定位GPS定位 6.位置纠偏html容器经纬度纠偏 前言 在百度地图的标注开发中&#xff0c;最为关键的操作就是经…

华硕主板来电开机自启

重启电脑&#xff0c;开机按del或者F2进入bios 按F10保存确认即可

浏览器跨站点通信(两个IP不同网站通信)

需求场景&#xff1a;OA系统会通过接口调用的方式将ERP系统的待办信息获取并显示在OA系统中。登录OA系统后&#xff0c;在OA系统中点击ERP系统的待办&#xff0c;会自动打开ERP系统业务处理页面&#xff0c;当ERP系统对应业务处理完毕&#xff0c;需要在OA系统中刷新待办记录&a…

【环境配置】解决No module named ‘librosa‘

执行以下命令下载 pip install librosa我这里遇到了报错&#xff1a; Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/ 相关解决方案请参考&#xff1a; 【环境配置…