前面说了并发任务之间的分工和协作,现在说并发任务之间同样很重要,甚至更重要的一个方面,互斥。因为分工、协作和互斥这三个方面,从重要性上来讲,或许可以三分天下,但从复杂性和可探讨性来讲,互斥显然更胜一筹,对互斥的深入使用,更加体现了一个人的并发编程能力。 互斥,即同一时间只能有一个并发任务可以对数据的 ...
                            
                            
                                分类:
编程语言   时间:
2020-02-01 10:24:39   
                                阅读次数:
98
                             
                         
                    
                        
                            
                            
                                    死锁:相互等待对方的资源,而且形成环路,造成首尾相接innodb将各个事务看为一个个节点,资源就是各个事务占用的锁 死锁成因: 1、不同表相同记录行锁冲突 事务A和事务B操作两张表 (a操作table1 where id = 1 && table2 where =2) (b操作table2 wher ...
                            
                            
                                分类:
数据库   时间:
2020-01-31 18:49:07   
                                阅读次数:
102
                             
                         
                    
                        
                            
                            
                                    本人曾接手过一些很奇怪的代码,基本到处都是是volatile和硬加锁,说是为了安全,就不怕死锁和性能太差吗?其实我压根不想改这种东西了,既然能过code review那么说明什么问题了?我不会让自己成为这类人。 乐观锁和悲观锁 简单解释就是,悲观锁认为在一个线程使用数据的时候,一定会有别的线程来修改 ...
                            
                            
                                分类:
编程语言   时间:
2020-01-30 22:46:51   
                                阅读次数:
94
                             
                         
                    
                        
                            
                            
                                    1、查询是否锁表 show OPEN TABLES where In_use > 0; 查询到相对应的进程 然后 kill id 2、查询进程 show processlist 补充: 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查 ...
                            
                            
                                分类:
数据库   时间:
2020-01-30 22:43:02   
                                阅读次数:
111
                             
                         
                    
                        
                            
                            
                                    代码如下 测试结果 利用jdk自带的jvisualvm进行测试 两个线程互相拥有对方想要的东西 ...
                            
                            
                                分类:
其他好文   时间:
2020-01-29 18:06:26   
                                阅读次数:
68
                             
                         
                    
                        
                            
                            
                                mysql5.7出现死锁时,导致死锁的那个事务会回滚,被死锁的事务正常获取锁。 ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction 发起死锁检测,发现死锁后,主动回滚死锁链条中的 ...
                            
                            
                                分类:
其他好文   时间:
2020-01-29 15:55:47   
                                阅读次数:
68
                             
                         
                    
                        
                            
                            
                                    前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识。行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高。 0.准备 \ 1.创建相关测试表tb_innodb_lock,注意数据库引擎为InnoDB。 \ 2.创建索引。 1.行锁定基本演示 \ ...
                            
                            
                                分类:
其他好文   时间:
2020-01-28 18:59:57   
                                阅读次数:
92
                             
                         
                    
                        
                            
                            
                                常用概念线程安全停止线程守护线程多线程通讯锁Synchornized悲观锁乐观锁共享锁/独占锁读写锁的机制死锁LockReentrantLockConditionCountDownLatchCyclicBarrier信号量SemaphoreThreadLocal高并发线程安全与不安全的类不安全的sp... ...
                            
                            
                                分类:
编程语言   时间:
2020-01-28 12:26:58   
                                阅读次数:
74
                             
                         
                    
                        
                            
                            
                                    3个同步对象a, b, c3个线程 t1,t2,t3故意设计场景,使这3个线程彼此死锁 1 package multiplethread; 2 3 import charactor.Hero; 4 5 public class Test5 { 6 public static void main(St ...
                            
                            
                                分类:
编程语言   时间:
2020-01-27 15:18:13   
                                阅读次数:
56
                             
                         
                    
                        
                            
                            
                                    前言 在前篇介绍 "死锁" 的文章中,我们破坏等待占用且等待条件时,用了一个死循环来获取两个账本对象。 我们提到过,如果apply()操作耗时非常短,且并发冲突量也不大,这种方案还是可以。否则的话,就可能要循环上万次才可以获取锁,这样的话就太消耗CPU了! 于是我们给出另一个更好的解决方案, 等待  ...
                            
                            
                                分类:
编程语言   时间:
2020-01-24 12:01:17   
                                阅读次数:
118