线程和进程的区别?

  • 进程:
    • 是程序得一次之星过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序就是从一个进程的创建开始,到进程的结束的过程。
    • 在java中当我们的main函数运行时就是启动了一个JVM进程,而main函数所在的线程就是进程中的一个线程,也称为主线程。
  • 线程:
    • 是比进程更小得执行单位,一个进程在执行过程中可以产生很多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程都有自己的程序计数器,虚拟机栈和本地方法栈。系统在产生一个线程或在各个线程间切换工作时,负担就比进程小得多,线程也被称为轻量级进程

线程和进程的关系、区别优、缺点?

  • 图解进程和线程关系
  • 从图上可以看出来,一个进程可以有多个线程,多线程间共享了堆和方法区(1.8后改为元空间)资源,且,每个线程都有自己的程序计数器、本地方法栈和虚拟机栈。
  • 总的来说线程就是进程划分出来的更小的运行单元,线程和进程最大的区别在于:进程的运行是相对独立的,而线程的运行则无法确定,同一个进程中的线程可以互相影响。线程执行开销小,但是不利于资源的管理维护,进程则相反;

程序计数器为什么是私有的?

  • 程序计数器的作用有哪些?
    • 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:代码的顺序执行,循环,异常处理等;
    • 多线程情况,程序计数器会记录当前程序执行位置,当线程被切换回来时候延续上次的位置继续执行;
    • 注意:如果线程执行的是native方法的话,程序计数器的记录值=undefined,只能记录Java代码的执行记录;

虚拟机栈和本地方法栈是私有的?

  • 虚拟机栈:每个java方法在执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息,从方法的调用到执行完成,就对应着一个栈帧的入栈和出栈;
  • 本地方法栈:虚拟机展示为虚拟机执行Java方法服务的,而本地反正是为虚拟机调用本地方法(native)服务的,在HotSpot虚拟机中和Java虚拟机合二为一;

所以为了保证线程中的局部变量不为其他的线程访问,本地方法栈和虚拟机栈都是私有的

简单说下堆和方法区

    • 堆和方法区是线程中共享的资源,也是进程中占用的最大的一块资源,主要用于存放新创建的对象(所有的对象都是在这里分配的内存),方法区主要是用于存放已被加载的类信息、常量、静态常量、即时编译器编译后的代码等数据;

[java进阶]关于多线程的知识点的更多相关文章

  1. Java进阶05 多线程

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/15/3000898.html 作者:Vamei 出处:http://www.cnblogs.com ...

  2. Java进阶之多线程

    多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式. 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令.单线程好像是一个只有一个队长指挥的小队,整个小队 ...

  3. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  4. 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)

    本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...

  5. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式

    Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...

  6. Java进阶知识点: 枚举值

    Java进阶知识点1:白捡的扩展性 - 枚举值也是对象   一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...

  7. 进阶Java编程(1)多线程编程

    Java多线程编程 1,进程与线程 在Java语言里面最大的特点是支持多线程的开发(也是为数不多支持多线程的编程语言Golang.Clojure方言.Elixir),所以在整个的Java技术学习里面, ...

  8. Java 进阶7 并行优化 JDK多任务执行框架技术

    Java 进阶7 并行优化 JDK多任务执行框架技术 20131114          Java 语言本身就是支持多线程机制的,他提供了 Thread 类 Runnable 接口等简单的多线程支持工 ...

  9. Java后端,最全知识点

    你可能有所感悟.零散的资料读了很多,但是很难有提升.到处是干货,但是并没什么用,简单来说就是缺乏系统化.另外,噪音太多,雷同的框架一大把,我不至于全都要去学了吧. 这里,根据基础.Java基础.Jav ...

随机推荐

  1. SpringCloud系列之分布式配置中心极速入门与实践

    SpringCloud系列之分布式配置中心极速入门与实践 @ 目录 1.分布式配置中心简介 2.什么是SpringCloud Config? 3.例子实验环境准备 4.Config Server代码实 ...

  2. 用于测试 SqlAnalyzer1.01 的21个测试用例

    感慨:当年看着 https://www.cnblogs.com/heyang78/p/11451814.html 一文望洋兴叹,如今我也自己做出来了! 21. 原文=select name, cnt ...

  3. java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?

    我们先用提干两个修饰词中的任意一个创建一个类 package components.javaTest.day4_20200910; /** * Question004: * java面试题0004-在 ...

  4. go http请求流程分析

    前言 golang作为常驻进程, 请求第三方服务或者资源(http, mysql, redis等)完毕后, 需要手动关闭连接, 否则连接会一直存在; 连接池是用来管理连接的, 请求之前从连接池里获取连 ...

  5. USB 设备驱动(写给自己看的)

    集线器与控制器(USB地址7bit) 设备,配置,端点,接口 USB1.0(低速1.2),1.1(全速450m),2.0(高速,电流传输)区别 引脚4根(V,D-,D+,gnd),miniUSB增加 ...

  6. 每日一道 LeetCode (48):最长回文子串

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  7. [Abp vNext 源码分析] - 21. 界面与文字的本地化

    一.简介 ABP vNext 提供了全套的本地化字符串支持,具体用法可以参考官方使用文档.vNext 本身是对 Microsoft 提供的本地化组件进行了实现,通过 JSON 文件提供本地化源,这一点 ...

  8. 深入解析Vue里函数的调用顺序介绍

    今天为大家分享一篇对vue里函数的调用顺序介绍,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. method用来定义方法的,比如你@click=& ...

  9. Python-迭代协议-__iter__ __next__ iter next yield

    iter 本质是for循环调用的实质,for循环通过调用这个函数返回可迭代对象生成器形式,开始迭代取值捕获StopIteration错误退出循环 for循环首先找__iter__方法,然后再找 __g ...

  10. CTFshow_Web入门源码

    Web1 题目打开始是这样的 直接看源码 Web2 题目打开是这样的,右键无法打开菜单,无法查看源码,F12也不可以 更改JavaScript权限,即可查看源码 Web3 真就抓个包看看 Web4 访 ...