java面试-谈谈你对volatile的理解】的更多相关文章

一.volatile特性: volatile是Java虚拟机提供的轻量级的同步机制.主要有三大特性: 保证可见性 不保证原子性 禁止指令重排序 1.保证可见性 1)代码演示 AAA线程修改变量number的值为60,main线程获取到的number值是0,就一直循环等待. 原因:int number = 0;number变量之前没有添加volatile关键字,没有可见性.添加volatile关键字,可以解决可见性问题. public class VolatileDemo { int number…
一.OOM(OutOfMemoryError): 对象无法释放或无法被垃圾回收,造成内存浪费,导致程序运行速度减慢,甚至系统崩溃等严重后果,就是内存泄漏.多个内存泄漏造成可使用内存变少,会导致内存溢出. 代码问题new 一个很大对象,导致内存溢出. 也可能内存真的不足导致内存溢出. 二.考虑: 1.垃圾回收算法设置是否合理 2.年轻代.老年代划分是否合理 3.内存泄漏 三.典型情况: 1.java.lang.StackOverflowError 在一个函数中调用自己就会产生这样的错误(栈溢出)…
一 前言 本篇文章的核心知识如下,主要是帮助大家更好的理解面向对象编程: 二面向对象VS面向过程 2.1 面向过程编程 面向过程编程(Process Oriented Programming )其意指是面向过程编程,what?,过程是什么? 面向过程编程其实是围绕着代码的执行过程而实现:我们打个比喻我现在想把昨天没洗的衣服给洗了(笑话,这绝对不是我,我用纯洁的人格担保!!!),我要执行的步骤如下: 衣服倒进桶里: 将水倒进桶里:nei 添加洗衣液和各种香料等待30分钟 洗刷刷..... 那转为代…
1.volatile是Java虚拟机提供的轻量级的同步机制 1.1保证可见性1.2不保证原子性1.3禁止指令重排 JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式. JMM关于同步规定: 1.线程解锁前,必须把共享变量的值刷新回主内存 2.线程加锁前,必须读取主内存的最新值到自己的工作内存 3.加锁解锁是同一把锁 由于JVM运行程…
jQuery是一个轻量级的javascript框架,极大的简化了js的编程. 1.首先jQuery提供了强大的元素选择器.用于获取html页面中封装了html元素的jQuery对象.像常见的选择器有:基本选择器,层次选择器,过滤选择器,表单选择器. 2.第二点就是jQuery提供了对css样式操作的支持,像对class属性的增加删除切换操作.还有对单个样式操作的支持的css方法,提供了一种简洁统一的操作样式的方法. 3.第三点就是jQuery出色的DOM操作的封装,极大的简化了javascrip…
请谈谈你对volatile的理解 1.volitale是Java虚拟机提供的一种轻量级的同步机制 三大特性1.1保证可见性 1.2不保证原子性 1.3禁止指令重排 首先保证可见性 1.1 可见性 概念:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值 package com.yuxue.juc.volatileTest; /** * 1验证volatile的可见性 * 1.1 如果int num = 0,number变量没有添加volatile关键字修饰 *…
"谈谈你对Redis的理解"! 面试的时候遇到这类比较宽泛的问题,是不是很抓狂? 是不是不知道从何开始说起? 没关系,今天我用3分钟教你怎么回答. 大家好,我是Mic,一个工作了14年的Java程序员. 这个问题面试官考察的目的是什么?希望得到什么样的回答? 考察目标 对于某某技术的理解这一类问题,它是一种比较宽泛的问题 在面试过程中,考察这类问题有两个很重要的目的: 在面试的过程中,面试官希望求职者能多说一些东西,从而更好的对你的整体情况和能力有一个清晰的判断,因此这类问题,可以找到…
在Java相关的职位面试中,很多Java面试官都喜欢考察应聘者对Java并发的了解程度,以volatile关键字为切入点,往往会问到底,Java内存模型(JMM)和Java并发编程的一些特点都会被牵扯出来,再深入的话还会考察JVM底层实现以及操作系统的相关知识. 接下来让我们在一个假想的面试过程中来学习一下volitile关键字吧. 1. Java并发这块掌握的怎么样?来谈谈你对volatile关键字的理解吧. 参考答案: 我的理解是,被volatile修饰的共享变量,就会具有以下两个特性: 保…
一.happens-before原则 同一个线程中的,前面的操作 happens-before 后续的操作.(即单线程内按代码顺序执行.但是,在不影响在单线程环境执行结果的前提下,编译器和处理器可以进行重排序,这是合法的.换句话说,这一是规则无法保证编译重排和指令重排). 1. 监视器上的解锁操作 happens-before 其后续的加锁操作.(Synchronized 规则) 2. 对volatile变量的写操作 happens-before 后续的读操作.(volatile 规则) 3.…
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic 深入理解Java内存模型(JMM)及volatile关键字 剖析基于并发AQS的重入锁(ReetrantLock)及其Condition实现原理 剖析基于并发AQS的共…