在了解悲观锁和乐观锁之前,我们先了解一下什么是锁,为什么要用到锁? 技术来源于生活,锁不仅在程序中存在,在现实中我们也随处可见,例如我们上下班打卡的指纹锁,保险柜上的密码锁,以及我们我们登录的用户名和密码也是一种锁,生活中用到锁可以保护我们人身安全(指纹锁)、财产安全(保险柜密码锁)、信息安全(用户 ...
分类:
其他好文 时间:
2020-05-29 13:44:51
阅读次数:
58
死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成 的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 产生死锁的必要条件: 1、互斥条件:所谓互斥就是进程在某一时间内独占资源。 2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3、不剥夺条件:进 ...
分类:
其他好文 时间:
2020-04-25 01:03:41
阅读次数:
287
说明 本篇是继上一篇并发编程未讨论完的内容的续篇。上一篇传送门: "Java并发编程一万字总结(吐血整理)" 活跃性问题 在上一篇我们讨论并发编程带来的风险的时候,说到其中 一个风险就是活跃性问题。活跃性问题其实就是我们的程序在某些场景或条件下执行不下去了。在这个话题下我们会去了解什么是死锁、活锁以 ...
分类:
其他好文 时间:
2020-03-29 12:32:06
阅读次数:
62
死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一 种互相等待的现象,若无外力作用,它们都将无法推进下去,此时称系统处于 死锁状态或系统产生了死锁。 饥饿:考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统 按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合 ...
分类:
其他好文 时间:
2020-01-09 14:44:50
阅读次数:
118
线程带来的风险 线程安全性问题 出现安全性问题的需要满足的条件:多线程环境、有共享资源、非原子性操作 活跃性问题 死锁 饥饿 活锁 性能问题 cpu上下文切换会有性能问题(cpu分时间片执行) 锁 自旋锁 自旋其实就是当一个线程获取到锁之后,其他的线程会进行阻塞等待,一直到这个线程释放锁后才能进入 ...
分类:
编程语言 时间:
2019-12-15 21:55:20
阅读次数:
98
1、Java 中的线程对应是操作系统级别的线程,线程数量控制不好,频繁的创建、销毁线程和线程间的切换,比较消耗内存和时间。 2、容易带来线程安全问题。如线程的可见性、有序性、原子性问题,会导致程序出现的结果与预期结果不一致。 3、多线程容易造成死锁、活锁、线程饥饿等问题。此类问题往往只能通过手动停止 ...
分类:
其他好文 时间:
2019-10-15 20:45:32
阅读次数:
77
Zookeeper是一个分布式协调系统,为应用提供一致性服务,实现配置、域名维护、分布式服务等。它以Fast Paxos算法为基础实现了Zab协议,通过选举leader,只有leader才能提交议案,从而解决Paxos算法多个议员提交议案互相排斥而产生的活锁问题。通过Zab协议传递leader状态改 ...
分类:
其他好文 时间:
2019-08-25 11:48:25
阅读次数:
72
Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现。Zookeeper 能够为分布式应用提供一致性服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。它以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个pr... ...
分类:
其他好文 时间:
2019-08-19 09:46:57
阅读次数:
73
概念: (一).临界区 临界区用来表示一种公共资源,或者说是一种共享数据。它可以被多个线程使用,但是每一次只能有一个线程能使用它。一旦临界区被占有,那么其他的线程只能等待。 (二).死锁(Deadlock),活锁(Livelock),饥饿(Starvation) ...
分类:
编程语言 时间:
2019-08-13 15:23:14
阅读次数:
87
活、死锁的定义 --引用https://www.cnblogs.com/sunnyCx/p/8108366.html 1.死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在 ...
分类:
其他好文 时间:
2019-06-08 00:41:15
阅读次数:
188