摘要: 安装redis集群要依赖 redis-trib.rb这个ruby脚本,那么就需要主机中有ruby环境,首先yum install ruby ,yum install rubygems 安装好ruby的依赖包,然后要安装redis 对应版本gem,gem install redis --version 阅读全文
posted @ 2019-07-20 16:51 会飞的喵星人 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 1.1final域的重排序规则 对于final域,编译器和处理器要遵守两个重排序规则。1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序 阅读全文
posted @ 2019-05-19 23:17 会飞的喵星人 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 锁的释放和获取的内存语义 锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的 临界 阅读全文
posted @ 2019-05-19 19:31 会飞的喵星人 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 1 volatile的内存语义 1.1 理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。锁的happens-before规则保证释放锁和获取锁的两个线程之间的内存可见性,这意味着对 一个volatile变量的读,总是能看到( 阅读全文
posted @ 2019-05-15 20:17 会飞的喵星人 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 锁 阅读全文
posted @ 2019-05-15 20:04 会飞的喵星人 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 1.1并发编程模型的两个关键问题: 线程之间的通信机制有两种:共享内存和消息传递,在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。 1.2Java内存模型的抽象结构: 在 阅读全文
posted @ 2019-05-14 21:38 会飞的喵星人 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 1.1volatile关键字使用底层原理: volatile是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。有volatile变量修饰的共享变量进行写操作的时候:1)将当前处理器缓存行的数 阅读全文
posted @ 2019-05-06 22:53 会飞的喵星人 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 概述 搜索二叉树在插入的数据是有序的时候会非常不平衡,几乎变成了线性结构,如插入数据顺序为10,20,30,40,50,那么该二叉树的结构会如下图所示,那么这样就和链表没啥区别,查找的时间复杂度就为O(n),而不是O(logN),为了以较快的时间搜索一颗树,我们就要保证这颗树的平衡性,也就是树的左右 阅读全文
posted @ 2019-05-04 13:02 会飞的喵星人 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 1概述 今天我们介绍一种新的数据结构二叉树,数组和链表这两种线性数据结构都有其不足之处,数组一经创建大小固定,且插入,删除都很慢,链表查询一定要从链表头开始遍历,链表的查找很慢,不管我们要找什么数据,都要从链表头开始遍历,我们就希望有那么一种数据结构,兼顾查找,插入,删除三种操作,于是二叉树应运而生 阅读全文
posted @ 2019-05-03 19:03 会飞的喵星人 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 概述 数组和链表都是最基础的线性数据结构,可以用来实现栈,队列等非线性,有特定应用场景的数据结构,我们发现数组作为数据存储结构有很很多缺陷,在无序数组中搜索效率低,在有序数组中插入效率又很低,无论哪种情况删除操作效率都很低;而且数组一旦创建,大小不可更改。 本文我们介绍一种新的数据储存结构,链表,除 阅读全文
posted @ 2019-05-03 09:56 会飞的喵星人 阅读(2427) 评论(0) 推荐(0) 编辑