文章分类
愿你走出半生,归来仍是少年

Java内存区域

Java 与 C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里 面的人却想出来。......

AQS原理解析

AQS 是一个提供用于实现阻塞锁和同步器框架,依靠 先入先出 (FIFO) 等待队列,该队列就是 CLH 同步队列,遵循 FIFO 原则 ,比如我们提到的 ReentrantLock , ReentranSemaphoretLock 等......

JUC中的Atomic原子类

不可分割的 一个操作是不可中断的,即使多线程的情况下也可以保证, 即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 原子类的作用和锁类似,是为了保证并发情况下线程安全,不过相比于锁,更有优势......

深入Java线程池

线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待下一个任务。 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来以下下好处......

JDK1.8中HashMap集合源码解析

HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。 JDK1.8 之后 HashMap 的组成多了红黑树,在满足下面两个条件之后,会执行链表转红黑树操作,以此来加快搜索速度。 HashMap是线程......

ThreadLocal 源码分析

ThreadLocal提高一个线程的局部变量,访问某个线程拥有自己局部变量。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。......

JDK1.8中LinkedList集合源码解析

LinkedList是基于链表实现的,从UML图可以看出是一个双向链表。除了当做链表使用外,它也可以被当作堆栈、队列或双端队列进行操作。不是线程安全的,继承AbstractSequentialList实现List、Deque、Cloneable、Serializable。......

Java线上故障解决方案

我们在⽣产环境中,程序代码、硬件、⽹络、协作软件等任⼀因素,都会引发意想不到的问题,所以排查产线问题⽐较困难,所以问题的定位体现了⼀名⼯程师的基础能⼒,问题的解决则体现了⼯程师的技能素养。......

JDK1.8中ArrayList集合源码解析

1. List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。 ......

手写Spring事务方式

事务的基本特性 1. 原子性 - 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。......

CAS原理

处理并发问题 我认为V的值应该是A,如果是的话我就把它修改成B,如果不是A,那么说明A被人修改过了,那我就不修改了,避免多人同时修改造成错误, CAS 有3个操作数,内存值 V,预期值A,要修改的值 B,当且仅预期值A和内存值V 相同时,才将内存值修改为 B, 否则什么都不做,最后返回现在的 V 值 CAS算法理解......

AQS

锁的协作类共同点:闸门 (和 ReentrantLock、Semaphore相似) 不仅 ReentrantLock、Semaphore、像CountDownLatch、都有这样的协作 (或者同步)功能,其实,他们底层都用了一个共同的基类,这就是 AQS 因为这些协作类有很多工作都是类似的,所以如果提取出一个工具类,那么就直接就可以用 Semaphore 、CountDownLatch 内部有一个......

CyclicBarrier循环栅栏

CyclicBarrier循环栅栏和CountDownLatch 很类似 ,都能阻塞一组线程 当有大量线程相互配合,分别计算不同任务,并且需要最后统一汇总的时候,我们可以使用CyclicBarrier 。CyclicBarrier可以构造一个集结点,当某一个线程执行完毕,他就会到集结点等待,知道所有线程都到了集结点,那么该栅栏就被撤销,所以有线程在统一出发,继续执行剩下都任务。 ......

Condition接口(又称条件对象)

当线程1需要等待某个条件的时候 ,它就去执行 condition.await() 方法,一旦执行了 await()方法,线程就会进入阻塞状态 然后通常会有另外一个线程,假设是线程2,去执行对应的条件,知道这个条件成立,线程2就会去执行condition.signal() 方法,这是 JVM 就会被从阻塞的线程里找到那些等待该condition的线程,当线程1就会收到可执行信号的时候,他的线程状态就......

Semaphore信号量

Semaphore 可以用来限制或管理数量有限资源的使用情况 信号量的作用是用来维护一个“许可证”,的计数,线程可以获取 许可证,那信号量剩余许可证就减一,线程也可以是否一个许可证,那剩余的许可证就加一,当信号量拥有的许可证为0时,那么下一个线程想获得许可证,就要进行等待,直到另外线程释放许可证......

你所不知道的final

如果对象在被创建后,状态就不能被修改,那么他就是不可变的 具有不变性的对象,一定是线程安全的,我们不需要采取任何额外的安全措施,也能保证线程安全......

自旋锁与阻塞锁

在 jdk 1.5 及以上并发框架 Java.util.concurrent 的 atomic 下 都是自旋锁实现的 AtomicInteger 的实现 :自旋锁的世勋啊原理是CAS AtomicInteger 中是调用底层unsafe 进行自增操作的源码中的 do-while 循环就是一个自旋操作,如果修改过程中一踏线程竞争导致修改失败,就在while 死循环,直至成功......

共享锁和排它锁

什么是共享锁和排它锁 排它锁,又称独占锁,独享锁 synchronized就是一个排它锁 共享锁,又称为读锁,获得共享锁后,可以查看,但无法删除和修改数 据, 其他线程此时业获取到共享锁,也可以查看但是 无法修改和 删除数据 共享锁和排它锁典型是ReentranReadWriteLock 其中,读锁是共享锁,写锁是 排它锁......

公平锁与非公平锁

公平是按照线程的请求顺序,来分配锁 非公平是指不完全按照请求的顺序,在一定情况下,可以插队的......

可重入锁与非可重入锁

**可重入锁又名递归锁**,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。......

悲观锁&乐观锁

乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。......

IntelliJ IDEA最新版官方支持汉化

随着 **IntelliJ Idea 2020.1**的发布,IDEA对我们最大的亮点就是支持中文了,对于英文不好的同学,可以说是一大福利......

Java锁介绍

Java锁介绍:重入锁,公平锁,偏量锁 。。。。......

JVM--Gc篇

**Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同数据区域**......

1 / 1