线程和进程的区别?

  • 进程:
    • 是程序得一次之星过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序就是从一个进程的创建开始,到进程的结束的过程。
    • 在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. 2 http

    response.write(string|buffer)可以调用0-n次 response.end(string|buffer) 方法.必须调用一次  response.setHeader('Con ...

  2. WinForm使用Setuo Project打包安装包 (附带vs2019 InstallerProjects安装程序)

    vs2019 InstallerProjects安装程序地址: 链接:https://pan.baidu.com/s/1K5iDuQT4CBBw2dJjRLqhjg提取码:dfhy 转载至https: ...

  3. Java审计之SQL注入篇

    Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...

  4. js 向上滚屏

    <!doctype html><html><head><meta charset="utf-8"><title>< ...

  5. 微信小程序-组件-基础内容

    1.text 1.作用:类似html的行内元素 2.常用属性: -space值:ensp:中文字符空格一半大小 emsp:中文字符空格大小 nbsp:根据设置字体的大小决定空格大小 -decode:d ...

  6. 【漫话DevOps】What is DevOps?

    最近几年"DevOps"这个关键词经常出现在项目开发当中,特别是随着微服务/容器/cloud在项目中的大范围应用,你不想知道都很难.作为一个伴随CI/CD到DevOps一路走来的工 ...

  7. SpringMVC-09-Ajax技术

    9. Ajax技术 简介 AJAX=Asynchronous JavaScript and XML (异步的JavaScript和XML) AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网 ...

  8. mysql浅谈--事务ACID特性

    mysql MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管 ...

  9. [LeetCode]415. 字符串相加、43. 字符串相乘

    题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...

  10. yum管理——搭建iso镜像私有yum源仓库(1)

    在服务器上一般是没有光驱的,那么我们怎么制作iso本地repo镜像源仓库? 通过本地iso镜像,copy到linux系统中一个目录中,进行伪文件系统挂载,执行如下命令: 挂载:mount -o loo ...