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

目录

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.查看线程及状态

 

 

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

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

相关文章

卡尔曼滤波原理及代码

目录 一.简介 二.原理 1.先验估计原理 2.后验估计原理 3.总结 三.示例 一.简介 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法,它可以在任意…

StarRocks 3.0 集群安装手册

本文介绍如何以二进制安装包方式手动部署最新版 StarRocks 3.0集群。 什么是 StarRocks StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以…

同步辐射X射线断层扫描成像在各行业的应用

同步辐射X射线断层扫描成像在各行业的应用 同步辐射X射线断层扫描成像(synchrotron radiation X-ray computed tomography,SRCT)是一种非侵入式、高分辨率的成像技术,利用同步辐射光束产生的高强度、高亮度、单色性和相干性的X射线…

【面试】MySQL事务的12连问

文章目录 前言1. 什么是数据库事务?2. 事务的四大特性3. 事务的隔离级别有哪些?MySQL的默认隔离级别是什么?4. Mysql为什么选择RR作为默认隔离级别?5. 很多大厂为什么选择RC数据库隔离级别?6. 并发场景,数据…

Qt连接MySql数据库(本地和远程数据库均可)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 三种方法方法一 略方法二 使用ODBC设置mysql为数据源库1. 添加ODBC数据源,在控制面板中找到管理工具,其中有ODBC数据源 64位的,打…

数字孪生与元宇宙:数字化科技的双向融合之路

概念 (1)元宇宙(Metaverse)是一个虚拟的三维世界,由数字内容和物理世界中的现实空间相互交织而成,能够提供各种虚拟体验,例如虚拟现实、增强现实、虚拟社交、虚拟经济等。在元宇宙中&#xff0…

8种不同类型的防火墙

什么是防火墙? 防火墙是一种监视网络流量并检测潜在威胁的安全设备或程序,作为一道保护屏障,它只允许非威胁性流量进入,阻止危险流量进入。 防火墙是client-server模型中网络安全的基础之一,但它们容易受到以下方面的…

连ChatGPT都不懂的五一调休,到底怎么来的?

今天是周几? 你上了几天班了? 还要上几天班放假? 五一啥安排? 出行的票抢到了吗? 调休到底是谁发明的?! 五一劳动节是要劳动吗? 为什么昨天是周一,今天还是周一&a…

差分优化算法——DE

🍎道阻且长,行则将至。🍓 目录 一、DE1.步骤2.特点 二、DE Optimiza1.函数最小值问题2.差分进化算法求解2.Java 实现与结果绘图 一、DE 差分进化算法是一种基于群体智能的优化算法,由Storn和Price于1995年提出,最早用…

基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(三)系统性能测试

系统性能分析与测试 本章将首先对系统电路的噪声和温漂进行分析,而后对采集系统的性能进行 测试,并对测试数据进行分析。 5.1 高精度 AD 转换电路噪声和温漂分析 5.1.1 电阻噪声与温漂 1 、电阻的噪声 电阻是一种噪声源,其严重程度取…

嵌入式就业怎么样?

嵌入式就业怎么样? 现在的IT行业,嵌入式是大热门,下面也要来给大家介绍下学习嵌入式之后的发展以及就业怎么样。 首先是好找工作。嵌入式人才目前是处于供不应求的状态中,据权威统计机构统计在所有软件开发类人才的需求中,对嵌入式工程师的…

matlab 点云滤波(中值、均值、高斯滤波)代码

点云中值、均值、高斯滤波 介绍一下滤波函数 smoothdata: 对含噪数据进行平滑处理 B smoothdata(___,method) 为上述任一语法指定平滑处理方法。例如,B smoothdata(A,sgolay) 使用 Savitzky-golay 滤波器对 A 中的数据进行平滑处理。Method-平滑处理方法 "…

Springboot获取jar包中resources资源目录下的文件

阿萨斯多问题现象: 今天在项目中遇到一个业务场景,需要用到resources资源目录下的文件,然后就在思考一个问题: 当项目打成jar后,Springboot要如何获取resources资源目录下的文件呢? 问题分析: 如…

GitLABJenkins

GitLAB & Jenkins 目录 实践:基于Jenkins提交流水线(测试成功)-2023.4.25 目的:掌握通过触发器将GitLab和Jenkins集成,实现提交流水线。 1、触发Jenkins构建 安装Generic Webhook Trigger插件 重启后,进入一个Pipeline项目设…

用Java创建可扩展的OpenAI GPT应用程序

ChatGPT 值得深入使用的方面之一是它的引擎,它不仅为基于Web的聊天机器人提供动力,还可以集成到Java应用程序中。 ▌Budget Journey App 想象一下,你想去一个城市旅行并且设置好了预算,你应该如何分配你的钱并让你的旅行难忘&am…

实例分割算法BlendMask

实例分割算法BlendMask 论文地址:https://arxiv.org/abs/2001.00309 github代码:https://github.com/aim-uofa/AdelaiDet 我的个人空间:我的个人空间 密集实例分割 ​ 密集实例分割主要分为自上而下top-down与自下而上bottom-up两类方法…

一种用于地灾边坡大坝安全深度位移监测测斜仪

1用途 固定测斜仪广泛适用于测量土石坝、面板坝、岩土边坡、路堤、基坑、岩石边坡等结构物的水平位移、垂直沉降及滑坡,固定测斜仪配合测斜管可反复使用,并方便实现测量数据的自动采集。 固定测斜仪采用的是耐冲击型倾斜传感器,可靠性好&am…

15天学习MySQL计划-锁(进阶篇)-第十天

15天学习MySQL计划-锁(进阶篇)-第十天 锁 1.概述 1.介绍 ​ 锁是计算机协调多个进程或线程并发访问某个资源的机制。数据库中,除传统的计算资源(cpu,ram,i/o)的争用以外,数据也是…

对数据结构的初步认识

前言: 牛牛开始更新数据结构的知识了.本专栏后续会分享用c语言实现顺序表,链表,二叉树,栈和队列,排序算法等相关知识,欢迎友友们互相学习,可以私信互相讨论哦! 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟&a…

使用 vscode 安装配置 clang-format(代码格式化)

目前,网上能找到的配置教程都是乱教的。他们以C为语言讲配置,其实clang-format默认就是C.所以他们在配置时,即是错了。也会以默认C格式化,也不会提示配置错误。结果他们还不知道他们错在哪?如果让他们配置.CS, .json&a…