随笔分类 - Java基础
摘要:事务原理 事务基础 事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。 一致性(Consistency):事
阅读全文
摘要:转载地址:https://blog.csdn.net/danchu/article/details/70238002 什么是CGLIB CGLIB是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的O
阅读全文
摘要:你知道什么是CAS机制吗?CAS和Synchronized的区别是什么?适用场景呢?优点与缺点呢? 我们先来看一手代码: 启动两个线程,每个线程中让静态变量count循环累加100次。 该代码输出结果如下。因为这段代码是线程不安全的,所以自增结果很可能会小于200. 我们加上synchronized
阅读全文
摘要:在《深入理解Java虚拟机(第二版)》*3.2.3节:再谈引用* 中,介绍了Java中的几种引用: 在JDK 1.2以前,Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。 这种定义很纯粹,但是太过狭隘,一个对象在这
阅读全文
摘要:抽象类与接口区别 抽象类 Java中接口和抽象类的定义语法分别为interface与abstract关键字。 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点: a、抽象类不能被实例化只能
阅读全文
摘要:一、什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 (2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在
阅读全文
摘要:动态代理 前言 代理模式是一种设计模式,能够使得在不修改源目标的前提下,额外扩展源目标的功能。即通过访问源目标的代理类,再由代理类去访问源目标。这样一来,要扩展功能,就无需修改源目标的代码了。只需要在代理类上增加就可以了。 其实代理模式的核心思想就是这么简单,在java中,代理又分静态代理和动态代理
阅读全文
摘要:在处理多线程并发安全的方法中,最常用的方法,就是使用锁,通过锁来控制多个不同线程对临界区的访问。 但是,无论是什么样的锁,乐观锁或者悲观锁,都会在并发冲突的时候对性能产生一定的影响。 那有没有一种方法,可以彻底避免竞争呢? 答案是肯定的,这就是ThreadLocal。 从字面意思上看,ThreadL
阅读全文
摘要:前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露、强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这样情况发生,增强系统的健壮性。 内存泄露 内存泄露为程序在申请内存后,无法释放已申请的内存空间,一次
阅读全文
摘要:前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结。他们有很多的方法都是我们经常要用到的。所以我们一定要把它好好的掌握起来! Java String API 1.获取: int length():获取字符串的长度。 char charAt( int index )根据位置获取该位置上某个
阅读全文
摘要:源码分析 概述 在平常的开发都说对于字符串的拼凑时,要尽量使用StringBuilder来操作,特别是对于长字符串的拼凑。 StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和St
阅读全文
摘要:Reentrantlock 一、ReentrantLock与synchronized的比较 相似点 它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,等到释放掉锁或者唤醒后才能继续获得锁。 区别 对于Syn
阅读全文
摘要:StringBuffer详解 概述 StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
阅读全文
摘要:Java线程池+源码详解 在Java面试中,线程池相关知识,虽不能说是必问提,但出现的频次也是非常高的。同时又鉴于公众号“程序新视界”的读者后台留言让写一篇关于Java线程池的文章,于是就有本篇内容,本篇将基于Java线程池的原理、实现以及相关源码进行讲解等。 什么是线程池 线程池是一种多线程处理形
阅读全文
摘要:无锁 偏向锁 轻量级锁 重量级锁 JDK1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在JDK1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。
阅读全文
