自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java实现不加锁的线程安全的单例模式

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18public class Singleton { public Singleton() { System.out.println("初始化"); } private static class Inner { private s...

2019-07-21 17:06:23 1551

原创 Java中ThreadLocal的使用

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18写两个个测试类:public class Entity { public String getName() { return name; } public void setName(String name) { this.name = ...

2019-07-21 15:29:15 778

原创 Java中Condition的使用

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18之前的一篇博客(https://blog.csdn.net/dap769815768/article/details/96712257)讲了wait、notify\notifyAll的使用,实际上目前我们比较推荐的方式是用Condition的await、signal\signalAll来实现类似的功...

2019-07-21 14:40:24 1270

原创 Java中wait、notify\notifyAll的使用

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18这三个关键子一般配合synchronized,不然会报java.lang.IllegalMonitorStateException异常。看下面的代码:public class Test { public synchronized void start() { try {...

2019-07-21 14:27:10 351

原创 CAS算法的一些局限

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18前面我分析了ConcurrentHashMap源码,它的线程安全策略是volatile+CAS+synchronized+sizeCtl。这里简单说下CAS一般会有哪些问题:1)ABA问题,所谓ABA就是将一个变量改为A,再改为B,再改为A,这个时候可能会认为这个变量没发生改变。这个问题可以通过...

2019-07-21 01:08:13 324

原创 一个Java8中ConcurrentHashMap的CAS锁引发的问题

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18使用java8运行如下代码:ConcurrentHashMap<String,Integer> map=new ConcurrentHashMap<>(16);map.computeIfAbsent("AaAa", key->map.computeIfAbsen...

2019-07-20 23:04:45 1691

原创 Java8中ConcurrentHashMap的源码分析

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18ConcurrentHashMap是java并发库里面的一个集合类,是一个线程安全的HashMap,它继承ConcurrentMap<K,V>接口。它的基本操作和HashMap几乎一样,差别就在于它实现了线程安全,它实现线程安全在Java8中使用的策略是CAS+volatile+sync...

2019-07-20 23:01:11 345

原创 java8中的HashMap源码分析(四):总结

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18上一篇(https://blog.csdn.net/dap769815768/article/details/96584394)我们分析了HashMap的get方法,下面我针对目前的源码分析对HashMap做下总结:1.往链表里面追加数据是从尾部加入,即p.next = newNode(h...

2019-07-20 15:27:32 113

原创 Hashtable、LinkedHashMap、HashSet和HashMap的比较

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 181)Hashtable实现Map<K,V>接口,它在put和get方法里面加了synchronized,因此是线程安全的,它不具备红黑树特性,是单纯的链表加数组。并且它是在链表的头部插入数据(区别于hashmap的尾部)。同时它不允许key和value为null。至于原因,和Concur...

2019-07-20 14:31:36 176

原创 java8中的HashMap源码分析(三):get方法

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18上一篇(https://blog.csdn.net/dap769815768/article/details/96484391)我们分析了put方法的源码,这篇我们分析一下get方法的源码。get方法的源码比较简单,就是根据key找到对应的node,获取到它的value,返回。下面一步步跟踪代码...

2019-07-20 13:55:10 302

原创 java8中的HashMap源码分析(二):put方法

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18在第一篇文章中我们介绍了HashMap的四个构造方法(文章地址https://blog.csdn.net/dap769815768/article/details/89189496)。这个四个构造方法的操作都是为了确定两个值:this.loadFactor = loadFactor;th...

2019-07-20 11:58:05 228

原创 java中String、StringBuilder、StringBuffer

StringBuilder和StringBuffer都是用于字符串操作的,StringBuffer是线程安全的,其线程安全的实现方案是加synchronized,简单粗暴。二者的使用场景都是大量的字符串拼接操作才会用到,都可以定义初始大小,大概就是把字符串转成Char数组,而这个初始大小,就是这个数组的大小。这样不会导致频繁给数组扩容。...

2019-07-11 17:12:36 89

原创 Java中信号量Semaphore的使用以及和线程池的区别

Java架构师交流群:793825326java版本:jdk1.8IDE:Idea2019Semaphore属于Java并发库里面的类,它在我看来算是线程池的一种吧,当然它和真正的线程池还是有些差别的。它的原理是管理一定数量的许可证,当线程要运行的时候,首先从它这里获取许可证(acquire),如果它的许可证发放完了,那么这个线程就要等待,直到其他的线程释放了许可证(release)。...

2019-07-04 16:53:12 2208

原创 Java等待所有的线程运行结束解决方案总结(8种)

Java架构师交流群:793825326java版本:jdk1.8IDE:Idea2019实际开发中,经常会碰到这种问题,某个线程需要等待所有的线程执行结束了,才可以继续执行。要实现这个效果,Java中有很多方案,下面我列举一些我所知道的方案:方案一:join。代码如下:Thread thread1=new Thread(new Runnable() { ...

2019-07-04 13:05:24 11992 1

空空如也

空空如也

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

TA关注的人

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