Zhl Blog

充满好奇,保持谦逊,一途一心。

Keepalived基本安装

Keepalived基本安装

一.介绍 首先来一段keepalived介绍 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。 二.环...

悲观锁-synchronized

悲观锁-synchronized

原理 通过字节码,可以看出来,synchronized在修饰代码块同时 由monitorenter和monitorexit指令来实现同步的,进入monitorenter指令后,线程将持有Monitor对象,退出moniitorenter指令后,线程将释放Monitor对象 JVM 中的同步是基于进入和退出管程(Monitor)对象实现的。每个对象实例都会有一个Monitor,Monitor...

乐观锁

乐观锁

概念 乐观锁认为自己在使用数据的时候不会有别的线程修改数据,所以不会添加锁的,只有在更新数据的时候判断之前有没有别的线程更新这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动重试)。 实现 java.util.concurrent.atomic包下面原子变量类就是乐观锁的一种实现方式 优势 ...

管程(Monitors)

管程(Monitors)

操作系统的互斥解决方案 临界区概念 临界区意味着这个区域是敏感的,因为一旦进程运行到这个区域,那么意味着会对公共数据区域或者文件进行操作,也意味着有可能有其它进程也正运行到了临界区。如果能够采用适当的方式,使得这两个进程不会同时处于临界区,那么就能避免竞态条件。 1. 信号量 semaphore 信号量出现是为了解决什么问题? 一个进程的阻塞和唤醒是在不同进程中造成的。进程A调用了sl...

java锁-目录

java锁-目录

开头 最近在深入学习java锁有关的知识,关于这一类知识点,除了表面的概念还涉及到内部更深层次的实现以及原理。翻阅的无数资料,对这些资料进行比较和学习,记录下来一些重要的作为笔记和文章,时刻翻出来进行学习和加强记忆。 乐观锁 【乐观锁】 悲观锁 概念 悲观锁认为自己在使用数据的时候一定会有其他线程来修改数据,因此获取数据的时候会先加锁,保证数据不会被其他线程修改 实现方式 synchr...

3.ReentrantLock-公平锁

3.ReentrantLock-公平锁

ReentrantLock默认是用非公平锁,具体文章见2.ReentrantLock-独占锁 那么公平锁是怎么实现的,它跟非公平锁到底有什么区别。 其实公平锁和非公平锁的实现几乎一样。只有在加锁有一出不同。公平锁会多出一个hasQueuedPredecessors()方法。如下图,左边是公平锁获取方式,右边是非公平锁获取方式。 1 2 3 4 5 6 7 public final boo...

2.ReentrantLock-独占锁

2.ReentrantLock-独占锁

1 2 3 lock.lock(); ... lock.unlock(); ReentrantLock默认锁的实现是是独占,非公平,可重入锁。 在ReentrantLock中内部有两个静态内部类NonfairSync和FairSync,集成Sync的抽象类,Sync是公平锁和非公平锁的一个子类,里面有尝试获取非公平锁的实现方式等等,它的子类就是AbstractQueued...

1.ReetrantLock-加锁过程

1.ReetrantLock-加锁过程

之前写过两篇文章,是关于ReentrantLock。 1.ReetrantLock:单线程下的加锁过程 2.ReetrantLock:多线程下的加锁过程 总感觉还差点什么,放了许久后,再次进入源码中学习,这次又有更深的理解,准备换个角度从纯流程开始描述。 概念 AQS 全称是 AbstractQueuedSynchronizer,顾名思义,是一个用来构建锁和同步器的框架,它...

2.ReetrantLock:多线程下的加锁过程

2.ReetrantLock:多线程下的加锁过程

一个简单的demo 通过一个Demo来展示在多线程模式下ReetrantLock加锁和释放锁的过程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 //Demo private static ReentrantLock lock = new Reentran...

1.ReetrantLock:单线程下的加锁过程

1.ReetrantLock:单线程下的加锁过程

一个简单的demo 首先通过一个Demo来展示在单线程模式下ReetrantLock加锁和释放锁的过程 1 2 3 4 5 6 7 8 9 10 //Demo private static ReentrantLock lock = new ReentrantLock(); public static void main(String[] args) { lock.lock();...