在线设计平台分析,seo综合查询站长工具关键词,如何做网络营销推广工作,房产行业微网站建设面视题之——悲观锁和乐观锁
概念
悲观锁
悲观锁是在执行线程任务时直接加锁#xff0c;以确保同一时刻只有一个线程可以访问共享资源。在使用悲观锁时#xff0c;每次访问共享资源时都会尝试获取锁#xff0c;如果锁已经被其他线程占用#xff0c;当前线程就会被阻塞以确保同一时刻只有一个线程可以访问共享资源。在使用悲观锁时每次访问共享资源时都会尝试获取锁如果锁已经被其他线程占用当前线程就会被阻塞直到获取到锁为止。
乐观锁
乐观锁则是在执行线程任务时不会直接加锁而是在读取资源时会先检查资源是否已被其他线程修改。如果资源未被修改当前线程就可以继续执行如果资源已被修改则需要回滚事务并重试。 在使用乐观锁时不会直接给线程任务中执行的 SQL 方法加锁而是通过在数据表中增加版本号或时间戳等字段来实现乐观锁。当多个线程尝试更新同一个记录时只有一个线程能够成功更新其他线程需要回滚事务并重试。 优缺点
悲观锁
优点 保证数据的完整性不会出现数据不一致的情况。操作简单易于实现。 缺点 对系统资源的占用较多性能较低。可能会阻塞其他线程的访问降低系统的并发性。
乐观锁
优点 对系统资源的占用较少性能较高。不会阻塞其他线程的访问提高系统的并发性。 缺点 可能出现数据不一致的情况需要使用额外的机制来解决。在高并发情况下可能会出现性能问题。
使用场景
悲观锁适用场景
对数据的修改非常频繁而且对数据的完整性要求较高。并发访问量较低因此使用锁的开销相对较小。操作的执行时间比较短。
乐观锁适用场景
对数据的修改非常频繁但并发访问量较高。对数据的完整性要求较高但允许一定程度的数据不一致。操作的执行时间较长因此使用锁的开销相对较大。
使用乐观锁开发中的实际场景 在我们设计中后台管理系统时我们需要设计库房管理即此时可能存在多个管理人员同时进行入库操作同时对一个库房信息进行访问修改此时我们适合使用乐观锁来提高效率。 使用方法
给库房的数据库表添加一个标识字段——版本号(version)在每次执行入库的sql语句时执行条件中添加判断version是否是最新的如果满足则修改对应内容以及版本号更新(如1,如果不满足则事务回滚重新执行。
sql示例
update inventory set qty qty #{qty},version version1 where productId #{productId} and version #{version}