![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 94
洋锅,小酌一杯
花名洋锅,你来了我们就干一杯。于一年千杯之最,心旷神怡
展开
-
带思考的JVM内部锁升级过程
1、为什么讲这个?总结AQS之后,对这方面顺带的复习一下。以下几个高频问题出发对象在内存中的内存布局是什么样的描述synchronized和ReentrantLock的底层实现和重入的底层原理谈谈AQS,为什么AQS底层是CAS+volatile描述下锁的四种状态和锁升级过程?Object o = new Object() 在内存中占用多少字节?自旋锁是不是一定比重量级锁效率高?打开偏向锁是否效率一定会提升?重量级锁到底重在哪里?重量级锁什么时候比轻量级锁效率高,同样反之呢?2、原创 2021-09-06 17:45:07 · 235 阅读 · 0 评论 -
AQS底层原理
1、AQS能干嘛?是什么?能干嘛:加锁就会有阻塞,有阻塞就需要排队,实现排队必然需要有某种形式的队列来进行管理。是什么?废话:抽象的队列同步器翻译一下:AQS是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。2、前置知识2.1 可重入锁举个例子:你开锁进入你家房子之后,里面的房间不需要再开锁才能进去,所有房间对你畅通无阻。当然如果你跟你老婆吵架了不让上床另当别论。可重入锁有名递归原创 2021-05-23 17:10:25 · 698 阅读 · 4 评论 -
小白也能看懂的Cookie跟Session的区别
1、什么是Cookie?首先为了能充分理解为什么引入Cookie和Cookie是什么,先看了例子。不然官网上定义的概念不太容易看懂。eg:我今天想找老王吃放,打电话给老王Me:老王啊,上次白剽很爽,今天再一起吃个饭呗?老王:今天有点事啊,下次再约呗Me:我插,有啥事比吃饭还重要啊,你这日子过退步了老王:额,在哪里吃?Me:上海和平饭店。。。。旁边的烧烤店老王:我靠,我听和平饭店还爽...原创 2020-04-20 09:58:22 · 524 阅读 · 0 评论 -
扒一扒ThreadLocal原理及应用
先总述,后分析深挖过ThreadLocal之后,一句话概括:Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。 数据隔离的秘诀其实是这样的,Thread有个TheadLocalMap类型的属性,叫做threadLocals...原创 2020-04-17 22:56:03 · 300 阅读 · 0 评论 -
java基础返璞归真--谈谈对多态的理解
记得这个问题当初只是在校招的时候才会问题,后来无意中听到同事面试一个社招提到这个问题?引起了我的思考,谈谈想法1、什么是多态?某一类事物的多种存在形态。例如:动物中的猫、狗猫这个对象对应的类型是猫类型, 猫 x = new 猫();同时猫也属于动物中的一种。也可以把猫称为动物。动物 x = new 猫() ; //父类型引用指向子类对象。动物是猫和狗具体事物中抽取出来的父类型,父类型...原创 2020-04-17 16:52:02 · 141 阅读 · 0 评论 -
多线程及并发面试基础(5)——Java中各种锁机制
1、公平锁/非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先到先得。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象举个例子:如果是公平锁,那么各个线程交替执行。非公平锁就是看哪个线程牛逼抢到的快准狠就它执行,不交替。看代码:设置公平锁:public clas...原创 2020-02-10 11:50:23 · 232 阅读 · 0 评论 -
多线程及并发面试基础(8)——线程池原理及运用
接上一节讲的阻塞队列的生产者消费问题之后,接下来将就阻塞队列的另外一个使用案列——线程池原理以及使用。1、为什么要使用线程池在我们实际的生产中,线程池的使用频率及高。那么我们在回顾一下为什么要使用线程池呢?线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果先生超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任...原创 2020-02-09 22:17:40 · 224 阅读 · 0 评论 -
多线程及并发面试基础(7)——阻塞队列
1、阻塞队列定义:顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下线程1往阻塞队列中添加元素二线程2从队列中移除元素当阻塞队列是空时,从队列中获取元素的操作将会被阻塞.获取当阻塞队列是空时,从队列中获取元素的操作将会被阻塞当阻塞队列是满时,往队列中添加元素的操作将会被阻塞.添加当阻塞队列是满时,往队列中添加元素的操作将会被阻塞.2、为什么用?有什么好处?在...原创 2020-02-09 21:28:11 · 372 阅读 · 0 评论 -
多线程及并发面试基础(6)——CountDownLatch/CyclicBarrier/Semaphore
CountDownLatch定义:让一些线程阻塞直到另一些线程完成一些列操作之后才被唤醒。即使门闩的意思,给定一个数,当这个数被减到0时才能开始运行另一个线程。主要有两个方法一个是await方法等待,一个是countDown方法让门闩减一。可以简单理解为:从自助餐拿的吃的必须吃完才会开门放人离开,不然打断腿。代码:假如拿了5个蛋糕,必须吃完才可以走。/*** * CountDown...原创 2020-02-09 20:59:16 · 357 阅读 · 0 评论 -
多线程及并发面试基础(4)——谈谈集合类(Arraylist)
1、谈谈ArraylistA. ArrayList 底层数据结构是数组,数组的特点就是可以快速随机访问,直接根据下标定位,缺点是插入和删除速度比较慢,需要移动元素。B. ArrayList 每次扩容之后的大小为之前的 1.5 倍。默认初始容量大小为 10。ArrayList只不过是对数组的包装,因为数组在内存中分配时必须指定长度,且一旦分配好后便无法再增加长度,即不可能在原数组后面再接上一段的...原创 2020-02-09 20:47:57 · 144 阅读 · 0 评论 -
多线程及并发面试基础(3)——CAS中的ABA问题
什么时ABA问题CAS算法实现的一个重要前提需要取出内存中中某时刻的数据并在当下时刻进行比较并替换,如果在这个时刻时间差中会导致数据的变化。例如:线程A从内存中读取值为1,这个时候线程2也读取了值1,线程B第一次把这个值修改为2,第二次又把这个值修改为1。然后线程A想对变量进行修改,首先进行CAS操作发现内存中的值确实是1,然后线程A操作成功。尽管线程A的CAS操作成功,但是不代表这个中间的...原创 2020-02-09 20:24:01 · 182 阅读 · 0 评论 -
多线程及并发面试基础(2)——volatile不保证原子性的解决方案
接上上一讲volatile的内容,我们说volatile有三个特性。其中一个不保证原子性。那么并发下面对num++之类简单运算且不用synchronized怎么实现呢?我们使用并发包下面的原子操作类。代码如下:class myData1{ volatile AtomicInteger atomicInteger = new AtomicInteger(0); void add(){...原创 2020-02-09 20:02:58 · 274 阅读 · 0 评论 -
多线程及并发面试基础(1)——谈谈volatile的理解
对多线程及并发面试基础的小总结针对面试中的问题,用理论–代码–总结讲各个问题讲清楚。1、谈谈你对volatile的理解 volatile是Java虚拟机提供的**轻量级**的同步机制。为什么这里是轻量级,而我们要把synchronized当做是重量级的锁。首先看看volatile的三个理论:保证可见性不保证原子性(该点正是volatile是轻量级的同步机制的原因)禁止指令重排1...原创 2020-02-09 19:09:50 · 272 阅读 · 0 评论 -
Java高并发编程笔记(一)同步器
本篇主要总结同步器的相关例子:包括synchronized、volatile、原子变量类(AtomicXxx)、CountDownLatch、ReentrantLock和ThreadLocal。还涉及到wait和notify/notifyAll。以及一些面试题如:生产者、消费者问题回忆关于线程的几个基本知识点:线程的概念(程序中不同的执行路径可以放到不同的CPU中同步运行); 如何启...原创 2019-12-26 17:18:03 · 495 阅读 · 1 评论 -
写两个线程,线程1添加10个元素到容器,线程2对元素个数做监控,个数为5时,线程2给出提示并结束
思路:开启两个线程,线程t1添加元素,线程t2监控元素个数为5。如何保证元素个数为5的时候t2执行,这里就思考如何再元素个数为5的时候t2拿到锁执行,t1等待。直到t2执行完之后t1再拿到锁。第一种方法:public class waitFiveSecondTest { volatile List list = new ArrayList<>(); pu...原创 2019-12-25 10:39:59 · 559 阅读 · 1 评论 -
浅谈volatile基本原理
内存可见性 volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。 为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看...原创 2019-12-24 17:44:35 · 154 阅读 · 0 评论