这篇文章只是一个新人简单的认识。
首先,我们常听到的就是synchronized,就是给当前监听的这个对象加锁,就像你去网吧上网,玩到一半,突然想去干点啥子,然后想回来后继续玩,那么你就会给电脑上一个锁,密码就你知道,这时候别人看到这空着的想来上,但是没有密码就只有等到你回来解锁玩完了后才能上了。(不要纠结为啥子就这一台机子,杠精我没办法)。
这种方法只是java代码中解决并发的一种。
还有种是基于数据的防止高并发的方法,就是常听说的悲观锁和客观锁。其实悲观锁乐观锁我觉得只是一种说法。
悲观锁,就是在sql中对数据进行加锁,具体是对单条数据还是对整张表做操作看情况而定。悲观锁有个条件就是在事务中才有用,当前使用者对数据进行加锁执行操作,其他使用者这时候对数据执行操作就会失败,只有在当前使用者使用后才能再使用了,这种方法虽然有效,但是也是视情况而定,如果是金融行业执行操作,岂不是等死人。
乐观锁,就是没有悲观锁的单人操作了,也就是可以多人对数据执行操作,但是,这个数据我会有一个标签记录,每次被操作一次就会在记录上修改一次,就像版本号样,原本A表的版本为1,我要对A表执行操作,拿到的A表示1版本的,同时你也要对A表执行操作拿到的A表也是版本1的,这时候你先对A表操作完,版本记录为2。我再提交A表操作,版本记录为2,这时发现我的版本记录和你的版本记录一样了,那么我的操作就视为无效。这就避免了长时间等待数据操作,也避免了数据的混乱。需注意:这种操作易出现脏读现象。视情况在代码里面辨别防止。
我们一步一步做大做强