死锁最简单的场景就是,A拿着a资源,必须等拿到b资源后才释放a资源;B拿着b资源,必须等拿到a资源后才释放b资源。
所以死锁的性质
一、独占(像synchornized和ReentrantLock一样)
1.同时只能一个人用
2.后面的人只能排队
3.不可把使用者赶出去
二、成环
Java产生死锁的根本原因也是如此:在获取一个锁的同时,又去申请另外的锁
谈论数据库前,先讲一些数据库基础知识
数据库的4种异常现象及隔离级别
1.脏读。正常情况下会以为这样的操作是脏读——事务1先读了A行,事务2然后改了,所以拿到了一个脏数据。
当然不是这样理解的。这是对事务没有理解到位,事务是一个时间段性质的东西,比如在这个事务的时间段内修改了数据库,虽然你没有提交,但是对数据库的改变确实是真实发生的。但是由于你的事务还未提交,你的事务随时有回滚的可能,事务记录了你的操作,如果你回滚了,那么数据库就会被恢复到之前的样子。
所以我们可以知道,如果你修改了数据库的东西,但是你这个事务又没有提交。如果这个时候有人读了,就很危险了,因为你是有可能会回滚这个事务的,一旦你回滚了这个事务,那就是脏读了。
2.怎么解决呢?我们规定,在写的事务未提交之前,我们不能读。
可是这样还是有安全隐患,假如我们一个事务,先读了一次,然后另一个事务过来修改了一个值,我们原来的事务再次读了一次,惊讶地发现上次读的值和这一次读的值不一样了。
3.怎么解决呢