自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 Java中的HashMap源码浅析

HashMap分析HashMap是一个存放多组key-value值的map。是由一组Node<K,V>[]数组组成的。它的key不能重复,可以为null。它默认的负载因子loadFactor是0.75, 默认容量是16,实际容量是16 * 0.75为12,每次扩容都是16的倍数。通过负载因子可以减少哈希碰撞,避免多个key挤在一个位置上,其他数组的位置上没值。hash():has...

2019-04-29 16:50:29 155

原创 Java中的Condition

文章目录Condition接口Condition接口介绍使用Condition实现wait/notify的弹夹射击例子Condition源码分析等待队列Condition的await()等待Condition的signal()唤醒Condition接口Condition接口介绍对于synchronized锁,线程之间的通信方式是wait和notify。对于Lock接口,线程间就是通过Cond...

2019-04-29 16:43:59 402

原创 Java中的Lock与ReentrantLock

文章目录Lock可重入锁ReentrantLock可重入分析公平锁与非公平锁分析自己实现一个可重入锁LockLock是JDK1.5之后提供的,它是Java语法级别的锁。加锁使用lock.lock(),解锁使用lock.unlock()。需要注意的是,它的unlock,必须放在finally中进行,因为如果在加锁后,代码出现了异常,是不会释放锁的。与synchronized对比:sync...

2019-04-29 16:41:16 1496

原创 Java中的AbstractQueuedSynchronizer队列同步器

文章目录AbstractQueuedSynchronizer队列同步器队列同步实现分析之同步队列队列同步实现分析之独占式同步资源获取与释放队列同步实现分析之共享式同步资源获取与释放独占式获取资源跟共享式获取资源实现上的区别可响应中断的获取资源自定义共享锁AbstractQueuedSynchronizer队列同步器###7.2.1 队列同步器的概念​ 队列同步器是用来构建其他锁组件的基础框...

2019-04-29 16:37:53 177

原创 Java中的CAS

文章目录CAS关键字CAS介绍CAS的ABA问题CAS的缺陷CAS关键字CAS介绍CAS是compareAndSwap(比较并交换),它有三个操作数,分别是内存地址V,旧的预期值A,新的值B,CAS执行时,当且仅当V的值符合旧预期值A时,处理器就更新V的值为B,否则就不进行更新。无论它是否更新V的值,都会返回V的旧值,这是个原子操作。​ CAS实现了无锁状态下的共享变量的非原子操作问题。...

2019-04-29 16:35:09 143

原创 Java中的synchronized关键字

文章目录synchronized关键字锁对象与锁class实现原理自旋锁与自适应自旋锁粗化轻量级锁synchronized关键字synchronized是JVM为我们提供的一个重量级锁。锁对象与锁class对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。对于同步方法块,锁是Synchonized括号里配置的对象。实现原理对于synchroniz...

2019-04-29 16:34:01 267

原创 Java中的volatile关键字

文章目录volatile关键字volatile结合JMM分析volatile实现内存可见性和有序性volatile关键字当一个变量被修饰为volatile关键字,那么某个线程修改了这个变量,其他变量能马上获取到最新修改的值。volatile结合JMM分析​ 对于一个普通的共享变量,多个线程在操作它时,不能直接从主内存操作,必须在线程的私有栈操作。每个线程的私有栈都保存着共享变量的副本,先...

2019-04-29 16:31:17 111

原创 Java中的ThreadLocal

文章目录ThreadLocal代码演示使用场景原理解析ThreadLocalMap的弱引用key与内存泄漏ThreadLocalThreadLock用于多线程时,解决变量共享的一个框架。ThreadLocal是线程局部变量,只能在本线程访问,不能在线程之间进行共享访问。void set(T value): 将此线程局部变量的当前线程副本中的值设置为指定值。T get(): 返回当前线...

2019-04-29 16:25:25 164

原创 Java线程之间的协作

文章目录线程间的协作sleep(long millis)yield( )wait() / notify()等待 / 通知的经典范式等待 / 超时模式join()线程间的协作sleep(long millis)Thread.sleep(),让当前线程暂停等待时间,让出CPU的使用权,不释放锁。yield( )让出当前的CPU时间片,将线程从运行改为就绪,并且再次参与CPU使用权的竞争。也不...

2019-04-29 16:21:58 408

原创 Java中的线程

1、线程1.1 什么是线程现代操作系统在运行一个程序的时候会开启一个进程。调度的最小单位是线程,一个进程里会有多个线程。这多个线程共享进程资源。进程是CPU调度资源的最小单位,线程是CPU调度和程序执行的最小单位。进程有自己的独立地址空间,而线程只有自己的堆栈空间和局部变量。进程切换需要很大的开销,线程切换开销比较小。1.2 Java天生是多线程的在main方法启动时,会启动一个ma...

2019-04-29 16:17:47 139

转载 Java中CAS详解(转)

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此

2017-09-13 17:16:25 180

原创 Java实现单链表的排序

要想实现链表的排序,使用双重循环,类似于选择排序。外重循环从头结点循环到尾节点,内重循环从外重循环的节点循环到尾节点,内重循环每个节点的值与外重循环的节点值进行判断,如果值比外重循环的值小,就交换之。相当与每次循环把最小的值放到前面。下面放上代码:/** * 排序链表 * @author haoge */public class SortNodeList { /** * 对链

2017-08-14 15:07:08 7929 7

原创 Java实现单链表的插入、删除、计算链表的长度和输出链表

首先定义单链表(以下统称为链表):链表有两部分:数据和指向下一个节点的指针。这里引用书中的一张图片:一般是知道头指针,然后根据头指针做插入、删除、反转、排序、输出等操作。使用Java实现链表的结构如下:/** * 链表的结构 * @author haoge */public class Node { //链表节点的数据 int data; //链表指向的下一个节点的指

2017-08-14 14:37:10 9664 1

原创 一个简单的例子模拟JDK动态代理

今天学习了代理模式,并且对JDK动态代理的底层实现有了一定的了解,下面把我学到的和我对动态代理的底层实现写个小例子展示一下。说到JDK动态代理,大家可能都熟悉。JDK动态代理用起来比较简单。首先写一个自己的代理类实现InvocationHandler接口public class MyProxy implements InvocationHandler { //被代理对象

2017-07-18 22:18:35 268

原创 Hibernate框架下使用Gson遇到StackOverflowError时如何解决

在hibernate框架下,我们经常会遇到使用多对多映射,比如学生和选修课、项目和成员等等。在这时候想把一个放着学生的List集合转换成JSON对象时,容易遇到StackOverFlowError。Exception in thread "main" java.lang.StackOverflowErrorat sun.util.locale.provider.LocaleProvider

2017-05-06 16:23:15 2788 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除