[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 ...
随机推荐
- Python的链接数上升得太快了!足见Python之火!
- Tcahce Stashing Unlink Attack
今年校赛有点可惜,最后两道质量不错的pwn每做出来,总的来说还是我太菜了,希望下次校赛能AK pwn题.不过这次校赛也没有白打,还是有学到新的东西的.在这里感谢出题的学长. glibc-2.29以后u ...
- html基础:DOM操作
DOM(Document Object Model 文档对象模型) 一个web页面被封装成一个dom对象,通过dom中的js对页面的标签进行操作 一.获取对象 浏览器页面上右键--检查--consol ...
- Conscription(POJ 3723)
原题如下: Conscription Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16584 Accepted: 57 ...
- Bootstrap学习第一天
听说bootstrap很火,页面做的非常好看,今天我决定开始学习bootstrap. bootstrap是一种响应式前端技术,可以用于构建适应多种设备的网站页面,当页面尺寸变化时会根据变化的尺寸适应设 ...
- python中的运动控制函数
运动控制函数:控制海龟走直线&走曲线 海龟向前行进,海龟走直线,参数d表示行进距离,也可以为负数,单位是像素 根据半径r绘制extent角度的弧形 r : 默认圆心在海龟左侧r 距离的位置 e ...
- 使用Jasmine和karma对传统js进行单元测试
当你拿到十五年前的一堆javascript的代码,你如何对这堆javascript代码写单元测试呢?于是就有了这篇文章. 注意:不需要装任何现代化js框架,包括angular,react,vue之类的 ...
- SpringBoot框架:两个方法同时调用时父方法使内部方法的DataSource注解失效的解决办法
一.问题如下: 使用的是SpringBoot框架:通过AOP和自定义注解完成druid连接池的动态数据源切换(三)中的两个数据库spring_boot_demo和other_data. 在UserCo ...
- @RestController和@Controller区别
1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewRe ...
- C#设置装配加载选项
NX在打开装配时,需要设置加载方式,如下图所示: 因此,当装配进行了拷贝之后,PART路径变化,再次用NX打开时,会报无法加载的错误.这时需要重新设置从搜索文件夹打开,再次保存之后,之后再按照保存打开 ...