iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java线程运行的原理详解
  • 170
分享到

Java线程运行的原理详解

2024-04-02 19:04:59 170人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录栈与栈帧线程的上下文切换总结栈与栈帧 JVM中由堆、栈、方法区所组成,其中栈内存就是分配给线程使用的,每个线程启动后,虚拟机都会为其分配一块栈内存。 每个栈由多个栈帧组成,对应着

栈与栈帧

JVM中由堆、栈、方法区所组成,其中栈内存就是分配给线程使用的,每个线程启动后,虚拟机都会为其分配一块栈内存。

  • 每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存
  • ‘每个线程只能有一个活动栈帧,对应着当前正在执行的方法
public class Main {
    public static void main(String[] args) {
        method1(10);
    }
    private static void method1(int x) {
        int y = x + 1;
        Object m = method2();
        System.out.println(m);
    }
    private static Object method2() {
        Object n = new Object();
        return n;
    }
}

首先进行类加载,类信息进入方法区

类加载完成后,jvm会启动一个线程为main的主线程,并且为线程分配一块栈内存,同时分配给任务调度器执行,当被分配时间片,分配给主方法一个栈帧内存。

 程序计数器存储下一行要执行的语句的位置,执行到main方法的method1语句,调用method1方法,为method1方法分配栈帧

同时在method1中又调用mehtod2方法,jvm又为method2分配栈帧

方法2执行完毕,释放method2的栈帧内存,并执行method2返回地址处的代码

随后的执行不在赘述,随着一个个方法的执行结束,依次出栈。

线程的上下文切换

因为以下一些原因导致cpu不再执行当前的线程,转而执行另一个线程的代码

  • 线程的cpu时间片用完
  • 垃圾回收
    • 垃圾回收时会停止所有当前正在工作的线程,执行GC线程
  • 有更高优先级的线程需要运行
  • 线程自己调用了sleep,yield,wait,join,park,synchronized、lock等方法

当Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java中对应的概念就是程序计数器,它的作用时记录下一条jvm执行的执行地址,是线程私有的

  • 状态包括程序计数器、虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等
  • Context Switch 频繁发生会影响性能

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!      

--结束END--

本文标题: Java线程运行的原理详解

本文链接: https://www.lsjlt.com/news/140681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java线程运行的原理详解
    目录栈与栈帧线程的上下文切换总结栈与栈帧 JVM中由堆、栈、方法区所组成,其中栈内存就是分配给线程使用的,每个线程启动后,虚拟机都会为其分配一块栈内存。 每个栈由多个栈帧组成,对应着...
    99+
    2022-11-13
  • Java的Tomcat和Servlet的运行原理详解
    目录一、客户端(浏览器)与服务器之间的交互二、Tomcat启动过程三、Tomcat处理请求过程四、Servlet的service方法总结在从前的时候,想要运行一个Java代码,就必须...
    99+
    2022-11-13
  • Java线程的停止实现原理详解
    目录线程停止的原理如何正确停止线程在普通情况下停止线程在阻塞情况下停止线程线程在每次迭代后都阻塞停止线程的最佳实践错误停止的方法被弃用的stop,suspend和resume方法用v...
    99+
    2023-01-28
    Java线程的停止 Java线程原理
  • 详解Gochannel管道的运行原理
    目录前言功能channel结构运行原理源码分析总结前言 Go推荐通过通信来共享内存,而channel就实现了这一理念。那channel是怎么运行的呢? 功能 举个例子看下channe...
    99+
    2023-05-19
    Go channel管道运行原理 Go channel运行原理 Go channel管道 Go channel
  • 详解Java线程池和Executor原理的分析
    详解Java线程池和Executor原理的分析线程池作用与基本知识在开始之前,我们先来讨论下“线程池”这个概念。“线程池”,顾名思义就是一个线程缓存。它是一个或者多个线程的集合,用户可以把需要执行的任务简单地扔给线程池,而不用过多的纠结与执...
    99+
    2023-05-31
    java 线程池 executor
  • 深入理解以DEBUG方式线程的底层运行原理
    目录一、Java 运行时数据区域二、用 DEBUG 的方式看线程运行原理三、线程运行原理详细图解四、用 DEBUG 的方式看多线程运行原理一、Java 运行时数据区域 友情提示:这...
    99+
    2022-11-12
  • 详解Java线程池的使用及工作原理
    目录一、什么是线程池?二、线程池要解决什么问题?三、线程池的使用四、常用阻塞队列五、线程工厂六、拒绝策略七、线程池的执行逻辑八、execute()方法九、执行流程一、什么是线程池? ...
    99+
    2022-11-12
  • java中 Filter的运行原理
    今天就跟大家聊聊有关java中 Filter的运行原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复...
    99+
    2023-06-14
  • 线程池的原理与实现详解
    一. 线程池的简介通常我们使用多线程的方式是,需要时创建一个新的线程,在这个线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需求,毕竟我们并不是什么...
    99+
    2022-11-15
    线程池 原理
  • Java多线程 ThreadLocal原理解析
    目录1、什么是ThreadLocal变量2、ThreadLocal实现原理3、内存泄漏问题4、使用场景1)存储用户Session2)解决线程安全的问题3)使用ThreadLocal重...
    99+
    2022-11-12
  • PHP核心的运行机制与实现原理详解
    PHP是一种流行的开源服务器端脚本语言,大量被用于Web开发。它能够处理动态数据以及控制HTML的输出,但是,如何实现这一切?那么,本文将会介绍PHP的核心运行机制和实现原理,并利用具体的代码示例,进一步说明其运行过程。PHP源码解读PHP...
    99+
    2023-11-08
    实现原理 运行机制 PHP核心
  • Java线程运行的示例分析
    这篇文章将为大家详细讲解有关Java线程运行的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。栈与栈帧JVM中由堆、栈、方法区所组成,其中栈内存就是分配给线程使用的,每个线程启动后,虚拟机都会为其分...
    99+
    2023-06-29
  • 深入理解Java编程线程池的实现原理
    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间...
    99+
    2023-05-30
    java 线程池 ava
  • Java程序的开发与运行原理是什么
    这篇文章主要介绍“Java程序的开发与运行原理是什么”,在日常操作中,相信很多人在Java程序的开发与运行原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java程序的开发与运行原理是什么”的疑惑有所...
    99+
    2023-06-16
  • Java线程池submit阻塞获取结果的实现原理详解
    目录前言案例演示和execute区别原理实现RunnableFuture类介绍任务执行run()原理任务结果获取get()原理任务取消cancel()原理总结前言 Java线程池中提...
    99+
    2022-11-13
    Java线程池submit阻塞获取结果 Java 线程池 阻塞获取结果 Java 线程池 阻塞
  • 详解PHP的执行原理和流程
    目录简介PHP启动第一步PHP启动第二步PHP关闭第一步PHP关闭第二步PHP底层工作原理①Zend引擎②Extensions③Sapi④上层应用构架思想Apache和php的关系A...
    99+
    2022-11-12
  • 带你了解JavaScript的运行原理
    目录浏览器内核JavaScript 引擎V8 引擎了解JavaScript 是如何运行的,以及的它的运行机制,首先,我们要了解浏览器的内核: 浏览器内核 了解过的都知道:不同的浏览器...
    99+
    2022-11-12
  • java线程池的工作原理
    这篇文章主要讲解了“java线程池的工作原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java线程池的工作原理”吧!一、线程池创建先看一下ThreadPoolExecutor参数最全的构...
    99+
    2023-05-30
  • 详解Java的线程状态
    Java的每个线程都具有自己的状态,Thread类中成员变量threadStatus存储了线程的状态: private volatile int threadStatus = 0; ...
    99+
    2022-11-13
    Java线程状态 Java线程
  • jvm运行原理以及类加载器实例详解
    JVM运行原理 首先从“.java”代码文件,编译成“.class”字节码文件,然后类加载器将“.class”字节码文件中的类给加载带JVM中,最后就是JVM执行写好的代码。执行过...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作