Java
执墨人
@公众号:石的三次方
展开
-
用一种方式,品读Lock和Synchronized锁
1.Synchronized锁底层是monitor监视器,每一个对象再创建的时候都会常见一个monitor监视器,在使用synchronized代码块的时候,会在代码块的前后产生一个monitorEnter和monitorexit指令,来标识这是一个同步代码块。1.1 执行流程线程遇到同步代码块,给这个对象monitor对象加1,当线程退出当前代码块以后,给这个对象的monitor对象减一,如果monitor指令的值为0则当前线程释放锁。1.2 反编译源码同步代码块反编译public void原创 2020-11-12 15:37:00 · 83 阅读 · 0 评论 -
面试重灾区——JVM内存结构和GC
JVM介绍更多原创文章和学习教程请关注 同名公众号@MakerStack1. JVM的体系架构(内存结构)绿色的为线程私有,橘色的为线程共有2. 类加载器负责将.class文件加载到内存中,并且将该文件中的数据结构转换为方法区中的数据结构,生成一个Class对象2.1 类加载器分类自启动类加载器。Bootstrap ClassLoader类加载器。负责加载jdk自带的包。%JAVA_HOME%/lib/rt.jar%即JDK源码使用C++编写在程序中直接获取被该加载器加载的类原创 2020-11-10 11:27:52 · 167 阅读 · 0 评论 -
基于MVC实现的RESTFul 风格API实现
基于MVC的RESTful风格的实现1.RESTful风格阐述REST服务是一种ROA(Resource-Oriented Architecture,面向资源的架构)应用。主要特点是方法信息存在于HTTP协议的方法中(GET,POST,PUT,DELETE),作用域存在于URL中。例如,在一个获取设备资源列表的GET请求中,方法信息是GET,作用域信息是URI种包含的对设备资源的过滤、分页和排序等条件良好的REST API不需要任何文档1.1REST风格资源路径REST风格的资源路径设计是面向原创 2020-11-06 14:59:04 · 331 阅读 · 0 评论 -
ThreadLocal深度解析
今天呢,和大家聊一下ThreadLocal。1. 是什么?JDK1.2提供的的一个线程绑定变量的类。他的思想就是:给每一个使用到这个资源的线程都克隆一份,实现了不同线程使用不同的资源,且该资源之间相互独立2. 为什么用?思考一个场景:数据库连接的时候,我们会创建一个Connection连接,让不同的线程使用。这个时候就会出现多个线程争抢同一个资源的情况。这种多个线程争抢同一个资源的情况,很常见,我们常用的解决办法也就两种:空间换时间,时间换空间没有办法,鱼与熊掌不可兼得也。就如我们的CAP理论原创 2020-11-05 17:31:41 · 134 阅读 · 0 评论 -
打击面试重灾区——Synchronized原理
兄弟们,大家好。时隔多天,我,终于来了。今天我们来聊一下让人神魂颠倒的Synchronized。不过呢,在读这篇文章之前,我希望你真正使用过这个东东,或者了解它到底是干嘛用的,不然很难理解这篇文章讲解的东西。这篇文章的大体顺序是:从无锁–>偏向锁–>轻量级锁–>重量级锁讲解,其中会涉及到CAS,对象内存布局,缓存行等等知识点。也是满满的干货内容。其中也夹杂了个人在面试过程中出现的面试题,各位兄弟慢慢享受。Synchronized在jdk1.6做了非常大的优化,避免了很多时候的用户态到原创 2020-11-04 22:43:40 · 197 阅读 · 0 评论 -
一篇搞定Java集合类原理
Java集合类实现原理1.Iterable接口定义了迭代集合的迭代方法iterator()forEach() 对1.8的Lambda表达式提供了支持2. Collection接口定义了集合添加的通用方法int size();boolean isEmpty();boolean contains();boolean add()boolean addAll()boolean remove() removeAll()Object[] toArray()3.List接原创 2020-11-03 22:49:14 · 234 阅读 · 0 评论 -
lsp都要会的内存模型
兄弟们好,给大家带来一篇内存模型的水文(手动滑稽)。Begin先来看大纲1.JMM规范先来说JMM是什么?JMM(Java Memory Model):全称Java内存模型。它定义了**Java虚拟机在计算机内存中的工作方式**。它是一套规范,并不真实存在。它包括三个点:原子性,可见性,有序性首先我们来看一下它的工作原理。线程操作数据的时候需要从主内存中读取,线程操作完数据以后进行写回主内存。可能有的兄弟要说了,为什么要搞这么麻烦呢?我直接操作主内存中的数据不就得了,干嘛非要复制一份再用。原创 2020-10-31 19:05:58 · 450 阅读 · 0 评论