首页 > 编程知识 正文

在岗一分钟安全六十秒怎么理解(一分钟教你理解什么是多线程)

时间:2023-05-06 13:28:59 阅读:122105 作者:254

我们知道。 如果程序没有跳转语句,而是按照程序的编制顺序从上到下依次运行的话,如果现在想让你设计一个可以一边玩游戏一边听歌的程序,该怎么设计呢?

如果你不知道多线程的概念,你一定不能设计。 但是在我们平时的生活中,多线程无处不在。 手机、电脑有多线程。 因此,要解决上述问题,必须使用多进程或多线程进行解决。

1 .并发http://www.Sina.com/:指两个或多个事件发生在http://www.Sina.com/。并发是指两个或多个事件在同一个时间段内上发生(同时发生)。

操作系统中安装了多个程序,需要指出的是,宏中有一段时间在同时运行着多个程序。 这在单CPU系统中,每个时刻只能运行一个程序。 也就是说,微观上这些程序只是分时交替运行,精明的鱼同时运行。 那是因为分时交替执行的时间非常短。

另一方面,在多个CPU系统中,通过将可同时执行的这些程序分配给多个处理器(CPU ),能够并行执行多任务。 也就是说,通过处理各处理器可以同时运行的程序,可以同时运行多个程序。 目前计算机市场上的多核CPU是多核处理器,内核越多,并行处理的程序越多,可以大大提高计算机的运行效率。

注:单核处理器计算机不能同时处理多个任务。 必须在一个CPU上同时执行多个任务。 同样,线程也是如此。 虽然我们知道从宏的角度看线程是并行执行的,但从微观角度看分析是串行执行的。 也就是说,如果一个线程运行一个线程,而系统只有一个CPU,则线程按某个顺序运行多个线程。 这称为线程调度。

2 .线程和进程在阅读下一篇文章之前,先看看有趣的进程线程图解。 对了解进程和线程有很深的理解

进程和线程的简要说明

并行是指在一个内存中运行的APP应用程序(指令集合),当一个程序加载到内存中时为进程),进程=程序执行。 每个进程都有独立的地址空间,该进程也是程序运行的进程,是系统运行程序和操作系统分配资源的基本单元。 系统运行程序是流程创建、运行和消失之前的过程。 流程的三种状态:

阻塞状态)等待某个事件的准备完成状态(等待系统分配CPU以运行该运行状态;占用CPU正在运行同一时刻)线程是进程的执行单元和进程的实体负责在当前进程中运行程序,并与属于同一进程的其他线程共享该进程的所有资源。 一个进程至少有一个线程,一个进程可以有多个线程。 此APP应用程序也称为多线程程序。

简单来说,在执行一个程序之后,可以有至少一个过程,并且一个过程可以包括多个线程

进程

进程是cpu资源分配的最小单元,线程是cpu调度的最小单元。 该程序至少有一个进程,该进程至少有一个线程。 线程可以依赖于进程执行线程,线程本身具有的资源(线程标识符、程序计数器、一组寄存器的值、堆栈)、属于同一进程的其他线程和进程具有的资源)代码段线程开销很小,但一个线程死就等于整个进程死,不利于资源管理和保护。 进程相反,开销大,但对线程安全。 我们可以打开计算机底部的任务栏,右键单击-----任务管理器,查看当前任务的进程:

线程

计算机中的进程:

内存映射:进程与线程区别:

内存映射:进程

分时调度

所有线程按顺序使用CPU使用权,并为每个线程平均分配占用CPU的时间。

预占时间表

让优先级高的线程优先使用CPU,如果线程的优先级相同,则随机选择一个(线程随机性)。 Java使用预占调度。

设置线程的优先级

抢占式时间表详细信息

大多数操作系统支持同时运行多个进程,而当前的操作系统几乎支持同时运行多个程序。 例如,我们一边使用代码编辑器,一边使用互联网云听歌,一边打开视频播放器、浏览器等软件。 此时,这些程序正在同时运行。 “我觉得这些软件好像在同一时间运行”。

事实上,中央处理器(CPU )使用预占调度模式在多个线程之间快速切换。 对于CPU的一个核心来说,在某个时间点只能运行一个线程,但CPU在多个线程之间的切换速度比我们的感觉快,看起来像是在同一时间点运行。

其实,多线程程序虽然不能提高程序的运行速度,但可以提高程序的运行效率,提高CPU的利用率。

线程

JVM执行main方法,main方法位于堆栈内存中。 然后,JVM向操作系统打开main方法到CPU的执行路径。 CPU可以通过此路径执行主方法。 此路径中有一个名为main (主)线程。

4.3创建线程类Ja

va使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。Java中通过继承Thread类来创建启动多线程的步骤如下:

定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体。创建Thread子类的实例,即创建了线程对象调用线程对象的start()方法来启动该线程

小贴士:

void start() :使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。

java程序属于抢占式调度,哪个线程的优先级高,哪个线程就优先执行;同一个优先级,随机选择一个执行。

代码如下:

自定义线程类:

public class MyThread extends Thread {//定义指定线程名称的构造方法public MyThread(String name) {//调用父类的String参数的构造方法,指定线程的名称super(name);}/** * 重写run方法,完成该线程执行的逻辑 */@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println(getName()+":正在执行!"+i);}}}

测试类:

public class Demo01 {public static void main(String[] args) {//创建自定义线程对象MyThread mt = new MyThread("新的线程!");//开启新线程mt.start();//在主方法中执行for循环for (int i = 0; i < 10; i++) {System.out.println("main线程!"+i);}}}

参考文章:

多线程:原理分析整理

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。