[java进阶]关于多线程的知识点
线程和进程的区别?
- 进程:
- 是程序得一次之星过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序就是从一个进程的创建开始,到进程的结束的过程。
- 在java中当我们的main函数运行时就是启动了一个JVM进程,而main函数所在的线程就是进程中的一个线程,也称为主线程。
- 线程:
- 是比进程更小得执行单位,一个进程在执行过程中可以产生很多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程都有自己的程序计数器,虚拟机栈和本地方法栈。系统在产生一个线程或在各个线程间切换工作时,负担就比进程小得多,线程也被称为轻量级进程
线程和进程的关系、区别优、缺点?
- 图解进程和线程关系
- 从图上可以看出来,一个进程可以有多个线程,多线程间共享了堆和方法区(1.8后改为元空间)资源,且,每个线程都有自己的程序计数器、本地方法栈和虚拟机栈。
- 总的来说线程就是进程划分出来的更小的运行单元,线程和进程最大的区别在于:进程的运行是相对独立的,而线程的运行则无法确定,同一个进程中的线程可以互相影响。线程执行开销小,但是不利于资源的管理维护,进程则相反;
程序计数器为什么是私有的?
- 程序计数器的作用有哪些?
- 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:代码的顺序执行,循环,异常处理等;
- 多线程情况,程序计数器会记录当前程序执行位置,当线程被切换回来时候延续上次的位置继续执行;
- 注意:如果线程执行的是native方法的话,程序计数器的记录值=undefined,只能记录Java代码的执行记录;
虚拟机栈和本地方法栈是私有的?
- 虚拟机栈:每个java方法在执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息,从方法的调用到执行完成,就对应着一个栈帧的入栈和出栈;
- 本地方法栈:虚拟机展示为虚拟机执行Java方法服务的,而本地反正是为虚拟机调用本地方法(native)服务的,在HotSpot虚拟机中和Java虚拟机合二为一;
所以为了保证线程中的局部变量不为其他的线程访问,本地方法栈和虚拟机栈都是私有的
简单说下堆和方法区
- 堆和方法区是线程中共享的资源,也是进程中占用的最大的一块资源,主要用于存放新创建的对象(所有的对象都是在这里分配的内存),方法区主要是用于存放已被加载的类信息、常量、静态常量、即时编译器编译后的代码等数据;
[java进阶]关于多线程的知识点的更多相关文章
- Java进阶05 多线程
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/15/3000898.html 作者:Vamei 出处:http://www.cnblogs.com ...
- Java进阶之多线程
多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式. 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令.单线程好像是一个只有一个队长指挥的小队,整个小队 ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
- Java进阶知识点: 枚举值
Java进阶知识点1:白捡的扩展性 - 枚举值也是对象 一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...
- 进阶Java编程(1)多线程编程
Java多线程编程 1,进程与线程 在Java语言里面最大的特点是支持多线程的开发(也是为数不多支持多线程的编程语言Golang.Clojure方言.Elixir),所以在整个的Java技术学习里面, ...
- Java 进阶7 并行优化 JDK多任务执行框架技术
Java 进阶7 并行优化 JDK多任务执行框架技术 20131114 Java 语言本身就是支持多线程机制的,他提供了 Thread 类 Runnable 接口等简单的多线程支持工 ...
- Java后端,最全知识点
你可能有所感悟.零散的资料读了很多,但是很难有提升.到处是干货,但是并没什么用,简单来说就是缺乏系统化.另外,噪音太多,雷同的框架一大把,我不至于全都要去学了吧. 这里,根据基础.Java基础.Jav ...
随机推荐
- 01_Python基础知识梳理
1.计算机知识基础 1.计算机组成 计算机底层: 点子电路,计算机只能识别两个数 0 1 硬件: 处理器(CPU), 运行内存(RAM), 主板(总线设备), 外部存储设备(硬盘U盘等 ...
- 测试JsonAnalyzer解析Json的十一个测试用例
目测以下测试用例都是通过的. 01. 原文={"status":"","message":"success"," ...
- 开发一个渐进式Web应用程序(PWA)前都需要了解什么?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/how-to-build-a-progres ...
- odoo10同一模型的不同视图不同群组权限控制
先描述下需求: 一个模型定义两个calendar视图,其中A视图G1群组可以CRUD操作,但是不显示特殊字段spec_field,对于B视图G1群组只能查看,G2群组只能修改其中的特殊字段spec_f ...
- Solr专题(四)Solr安全设置
因为solr的admin界面默认只需要知道ip和端口就能直接访问,如果被别有用心的人盯上就很容易给你的系统带来重大的破坏,所以我们应该限制访问. 请注意本例使用的是Solr7. Solr集成了以下几 ...
- Redis安装即python使用
一:简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...
- 5.CyclicBarrier-栅栏
- SVN检出maven项目
(一)直接单击项目,右键选择configure,选择convert to maven project (二)删除project explorer中的项目,并重新从工作区间导入maven项目.
- Ubuntu16环境安装和使用NFS
通过NFS服务我们可以方便的读写服务器上的文件,一起来实战Ubuntu16环境安装和使用NFS: 文章概要 本次实战由以下步骤组成: 列举环境信息: 在192.168.119.128安装NFS服务,将 ...
- Android如何使用注解进行代码检查
原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! Android Studio 内置了代码检查工具 Lint,可在菜单栏选择 Analyze > Inspect Code 执 ...