课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的应用在软件开发项目中是非常常见的一个功能,而今天我们就通过案例分析来了解一下,不同锁的类型与应用方法。
一、线程锁,进程锁,分布式锁
线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。
进程锁:也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制(操作系统基本知识)。
分布式锁:当多个进程不在同一个系统之中时,使用分布式锁控制多个进程对资源的访问。
二、分布式锁的设计不需要考虑业务吗?
分布式锁的设计并不是完全美好的,只能针对某些业务场景下使用,如果要对所有业务使用,必须充分理解业务需求合理的设计,至于原因就和各位j2ee开发时mybatis的二级缓存以命名空间为单位所要注意的业务问题时一样的。
intsmaze使用分布式锁,我们会把某表的第二第三行作为id来锁住,如果有相同的操作时更新该表第二第三行,我们才不让他修改,必须让他拿到锁才可以。但是如果有个操作仅仅是修改第二行,这个时候他就获得了对该行的操作,而且等数据库释放掉之前操作对该行的锁后。所以分布式锁并不是随处可用的,只是在某些场景下可以使用。比如业务系统不会存在单独修改第二行的操作。
三、分布式锁用于hbase存储系统
实际开发场景中,我们会对hbase操作进行分布式锁,hbase作为一款优秀的非内存数据库,传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性,即通常所说的ACID特性。为了实现事务特性,HBase采用了各种并发控制策略,包括各种锁机制、MVCC机制等。因为hbase只支持行级事物,当业务需要并发操作两行甚至多行记录时,hbase本身就无法提供ACID的支持了。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。