一个想写小说的程序员

苟日新,日日新,又日新。

二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)

二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法) 层序遍历 /** * 树结构定义 */ private static class BinaryNode<T> { BinaryNode(T theElemen...

2018-12-26 17:00:24

阅读数 234

评论数 0

快排算法的Java实现

快排算法的Java实现 快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边。然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现: public static void sort(int a[], int start, int end) { ...

2018-12-26 14:30:07

阅读数 420

评论数 0

数据库四种隔离级别

数据库四种隔离级别 数据库中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间可见,哪些不可见,较低的隔离可支持更高的并发。 未提交读 read uncommitted 可以读到别的事务中没提交的操作。会产生脏读。 可能产生脏读,不可重复读,幻读 读提交 read...

2018-12-19 15:52:38

阅读数 26

评论数 0

Http协议报文结构

Http协议报文结构 Http请求 HTTP请求由状态行、请求头、请求正文三部分组成。 状态行包括: Request URL: https://www.baidu.com/his?wd=&from=pc_web&rf=3&...

2018-12-17 17:48:49

阅读数 161

评论数 0

二叉树前序、中序、后序遍历求法

二叉树前序、中序、后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历: 1.后序遍历左子树 2.后序遍历右子树 3.访问根节点 三种方法的特点: 前序:开头是头...

2018-12-17 16:24:55

阅读数 29

评论数 2

Java垃圾回收(GC)机制详解

Java垃圾回收(GC)机制详解   转自:https://www.cnblogs.com/xiaoxi/p/6486852.html 一、为什么需要垃圾回收   如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不...

2018-12-17 14:53:41

阅读数 74

评论数 0

Java中 synchronized 关键字的理解

synchronized 关键字的理解 在Java中,synchronized 是一个重量级的控制并发的关键字。 这个关键字可以保证并发过程所必须的“原子性”,“可见性”,“有序性” 一,用法: 在方法内加锁: synchronized 块在代码编译后生成的字节码中实际上是加上monit...

2018-12-13 21:49:31

阅读数 53

评论数 0

LinkedHashMap 的理解以及借助其实现LRU

LinkedHashMap 的理解以及借助其实现LRU LinkedHashMap中有一个参数 accessOrder,这个参数定义了LinkedHashMap的访问顺序。 LinkedHashMap中继承了Node,给Node新增了2个新的属性before和after static clas...

2018-12-12 17:32:28

阅读数 84

评论数 0

ConcurrentHashMap源码学习

ConcurrentHashMap源码学习 自从学习了AQS之后,想着重新读一下ConcurrentHashMap的源码来加深下理解,所以有了这篇文章,针对ConcurrentHashMap常用的方法进行分析。 0,基础知识以及一些字段的含义 1.8中的ConcurrentHashMap使用...

2018-12-11 22:35:25

阅读数 27

评论数 0

AQS理解之七——AQS中的条件队列

AQS中的条件队列 在AQS中还实现了一个类,ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列。 先看看他的uml图。 主要方法 它实现了Condition接口,主要实现的方法是await和signal以及它们的带时间参数方法。 条件队列的一般用法: ...

2018-12-10 16:58:42

阅读数 75

评论数 0

AQS理解之六,AQS的其他实现类

AQS理解之六,AQS的其他实现类 1,ThreadPoolExecutor 中的 Worker 类 protected boolean tryAcquire(int unused) { if (compareAndSetState(0, 1)) { set...

2018-12-10 13:44:05

阅读数 44

评论数 0

AQS理解之五—并发编程中AQS的理解

AQS理解之五—并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问。 先看下AbstractQueuedSynchronizer 这个类的内部变量。 Head和tail是...

2018-12-09 11:45:09

阅读数 96

评论数 0

AQS理解之四—看看我们写的和 ReentrantLock 的公平不公平锁的区别

AQS理解之四,看看我们写的和 ReentrantLock 的公平不公平锁的区别 首先看下ReentrantLock的lock和unlock方法。 不公平锁版本lock方法 final void lock() { if (compareAndSetState(0, 1)) ...

2018-12-09 11:34:32

阅读数 116

评论数 0

AQS理解之三,由刚才写的锁转变成一个公平锁

AQS理解之三,由刚才写的锁转变成一个公平锁 在第二节里我们实现了一个不公平的锁,之所以说它不公平,主要是因为加锁后解锁时,阻塞的其他线程获取到的锁的可能是随机的,并不是按照顺序来确定的,如果要转变为公平锁,我们应该要记录这个进入的顺序,并在解锁时必须满足是第一个阻塞等待的线程才解锁。 其次,...

2018-12-09 10:37:02

阅读数 36

评论数 0

AQS理解之二,自己设计一个锁

AQS理解之二,自己设计一个锁 一,实现锁的条件 首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西: 1,记录是哪个线程持有了锁。 2,如果有一个变量代表加锁,A线程加锁,需要让B线程能看见,这里需要可见性,所以我们可能要用到volatile变量。 3...

2018-12-08 23:33:41

阅读数 27

评论数 0

AQS理解之一,基础知识——LockSupport

AQS理解之一,基础知识——LockSupport LockSupport类位于java.util.concurrent包下。 顾名思义,就是一个实现锁的辅助类。 来看下他的类结构: 其中的变量都是通过UNSAFE类来赋值,代码如下: private static final sun...

2018-12-08 21:55:11

阅读数 68

评论数 0

深入浅出理解锁之—— AbstractQueuedSynchronizer

并发编程中AQS的深入理解 前一段时间学习了AQS的代码,对java中的锁有了新的理解,用这篇博客来记录下。大概分为以下几个部分。 一,基础知识——LockSupport 二,自己设计一个锁 三,由刚才写的锁转变成一个公平锁 四,看看我们写的和ReentrantLock的公平不公平锁的区...

2018-12-08 21:24:24

阅读数 88

评论数 0

Java内存模型与happens-before原则

Java内存模型 Java内存模型不同于Jvm内存模型,Java内存模型(JMM)规定了JVM必须遵循一组最小保证,这组保证规定了对变量的写入操作在何时将于其他线程可见。 一,平台的内存模型 二,重排序 再没有充分同步的程序中,如果调度器采用不恰当的方式来交替执行不同线程的操作,那...

2018-12-05 16:11:48

阅读数 93

评论数 0

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