摘要:内容来自《What Every Programmer Should Know About Memory》的 3.3.4 节 Multi-Processor Support。 这篇文章是按论文的格式写的,与其说是文章,说是书更加合适,毕竟总共有 114 页。作者 Ulrich Drepper 是真大牛
阅读全文
lotus贵有恒何必三更眠五更起 最无益只怕一日曝十日寒 |
|
随笔分类 - corejava-基础
摘要:内容来自《What Every Programmer Should Know About Memory》的 3.3.4 节 Multi-Processor Support。 这篇文章是按论文的格式写的,与其说是文章,说是书更加合适,毕竟总共有 114 页。作者 Ulrich Drepper 是真大牛
阅读全文
摘要:一、红黑树介绍1、R-B Tree概念红黑树(Red Black Tree,简称R-B Tree) 是一种自平衡二叉查找树,它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。 红黑树是特殊的二叉
阅读全文
摘要:大家都知道生产中可以使用volatile达到保证可见性和指令重排的目的。但是对其实现原理并不是很清楚,为了加深学习和理解感觉很有必要来写篇博客总结一下。 JMM—java内存模型 想知道volatile实现原理首先得去了下解JMM,我们都知道JVM会为每一个thread开辟一块自己的工作空间,在我们
阅读全文
摘要:一、String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /**
阅读全文
摘要:知识总结 1. sychronize锁的五个特性:原子性,可见性,有序性,可重入性,非公平锁 2.sychronized的两种用法:方法,代码块 3. sychonized的实现:反编译后,可以看到 同步块是由monitorenter指令进入,然后monitorexit释放锁 4. sychroni
阅读全文
摘要:前言 面试题:synchronized是可重入锁吗? 答案:synchronized是可重入锁。ReentrantLock也是的。 1、什么是可重入锁呢? 关于什么是可重入锁,我们先来看一段维基百科的定义。 若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该
阅读全文
摘要:转自:http://www.jianshu.com/p/007bd7029faf 简单锁 在讲述简单锁的实现之前,我们先来看一个锁的应用例子: public class Counter{ private Lock lock = new Lock(); private int count = 0; p
阅读全文
摘要:上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个char[]数组,变量名value,声明了一个int类型的变量hash(hash的作用我们后续会讲),话不
阅读全文
摘要:ArrayList部分一共五篇文章了,并且引入了时间复杂度来分析,强烈建议大家一定要按顺序阅读,本文是第2篇,相关文章分别是: 1、ArrayList初始化 - Java那些事儿专栏 再次强调,ArrayList是一个普通的类,如果我们开心,可以自己写一个。 ArrayList初始化 - Java那
阅读全文
摘要:ArrayList初始化 - Java那些事儿 ArrayList部分一共五篇文章了,并且引入了时间复杂度来分析,强烈建议大家一定要按顺序阅读,本文是第1篇。 前些天的文章,反复的画图,不停的重复,就是想让大家理解,对象在内存中是什么样的。也是为今天的及以后的讲解打下基础。如果要说大家在写Java代
阅读全文
摘要:hashmap的扩容因子是0.75 原因 参考:HashMap默认加载因子为什么选择0.75?(阿里) 阿里的人问 数组的时间复杂度是多少,链表的是多少,hashmap的时间复杂度是多少。。。。。 后来才知道,时间复杂度是要区分 增删改查的。。。。主要看查询的时间复杂度; 1、数组 查询的时间复杂度
阅读全文
摘要:name时间复杂度 ArrayList :根据下标查询 :arr[10] O(1) ArrayList :根据内容查询 :for循环遍历 O(n) ArrayList底层是j基于数组实现 linkedList底层是基于 链表实现 LinkedList查询 无论下标还是内容都是 O(1) JDK7 h
阅读全文
摘要:Hashtable 初始容量是11 ,扩容 方式为2N+1; HashMap 初始容量是16,扩容方式为2N; 阿里的人突然问我为啥扩容因子是0.75,回来总结了一下; 提高空间利用率和 减少查询成本的折中,主要是泊松分布,0.75的话碰撞最小, HashMap有两个参数影响其性能:初始容量和加载因
阅读全文
摘要:转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 我相信大家都看过很多的关于线程池的文章,基本上也是面试必问的,好像我写这篇文
阅读全文
摘要:前言 很多时候,我都想向大家传输一个思想,那就是只有懂了原理,才能随心随心所欲写代码.而看源码,又是了解原理的一个非常重要的途径. 然而,肥朝之前的文章,大致分为三类 源码解析,穿插怎么看源码(参考肥朝Dubbo源码解析系列文章) 怎么临摹一个一比一的源码(参考肥朝dubbo源码解析-简单原理、与s
阅读全文
摘要:文章目录 一. JSR 166及J.U.C 1.什么是JSR: 2.什么是JCP 3. 什么是openJDK 4.什么是JSR 166 5.什么是J.U.C 二.本文目的 三.对线程池的认识 1.线程池是什么 2.队列是什么 3.为什么要使用线程池 4.个人认识 四.自己编写一个线程池 1.创建线程
阅读全文
摘要:问题 (1)自己动手写的线程池如何支持带返回值的任务呢? (2)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的任务的,那么,我们自己能否实现呢?必须可以,今天我们就一起来实现带返回值任务的线程池。 前情回顾 首先,让我们先回顾一下上一章
阅读全文
摘要:问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写的线程池如何测试? 简介 线程池是Java并发编程中经常使用到的技术,那么自己如何动手写一个线程池呢?本文彤哥将手把手带你写一个可用的线程池。 属性分析 线程池,顾名思义它首先是一个“池”,这个池里面放的是线程,线程是用来执行任务的
阅读全文
摘要:前言 和设计模式一样,打算花三个月的时间,结合《Java并发编程实战》一书,来总结下并发方面的知识。第一章从线程池的原理开始总结,希望自己能坚持下来,加油! 1. 如何实现一个线程池? 线程池的概念这里不多说,在讲它的原理前,我们先自己想一下,如果我来写,那如何实现一个线程池? 1.1 线程池的重要
阅读全文
摘要:1. 通过Executors创建线程池的弊端 在创建线程池的时候,大部分人还是会选择使用Executors去创建。 下面是创建定长线程池(FixedThreadPool)的一个例子,严格来说,当使用如下代码创建线程池时,是不符合编程规范的。 ExecutorService fixedThreadPo
阅读全文
|