- 博客(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关注的人