一: 两种实现方式: 1.继承Thread类重写run方法 2.继承Runnable接口重写run方法(通常用这种,java单继承的局限性,后期还想继承其他类会无从下手) 二:简单demo1(多线程模拟买票) 由于资源没有加锁,导致数据异常问题 三 简单demo2(模拟龟兔赛跑) ...
分类:
编程语言 时间:
2020-02-16 16:34:01
阅读次数:
85
面试官:你了解乐观锁和悲观锁吗? 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。 悲观锁的实现方式是加锁,加锁既可以是对代码块加锁(如Java的synchronized关键字),也可以是对数据加锁(如MySQL中的排它锁)。 乐观锁的实现方式主要有两种: "CAS机制" 和版本号机制, ...
分类:
其他好文 时间:
2020-02-15 15:47:54
阅读次数:
85
数据库锁: 首先引用一张其他博主的图: 下面我就针对这图中的锁逐一进行一下解释: 悲观锁: 数据库总是认为多个数据库并发操作会发生冲突,所以总是要求加锁操作。悲观锁主要表锁、行锁、页锁。 乐观锁: 数据库总是认为多个数据库并发操作不会发生冲突,所以总是不加锁操作。所以在数据进行提交更新的时候,才会正 ...
分类:
数据库 时间:
2020-02-15 13:18:30
阅读次数:
99
1.线程加锁 多个线程需要共享对同一个数据的访问。如果每个线程都会调用一个修改共享数据状态的方法,那么,这些线程将会互相影响对方的运行。在Java语言中,引入对象互斥锁的概念,保证共享数据操作的完整性。每个对象都对应一个可称为“互斥锁”的标记,这个标记保证在任一时刻,只能有一个线程访问对象。就像上一 ...
分类:
编程语言 时间:
2020-02-14 14:40:35
阅读次数:
88
并发编程面试题-内存模型说下内存模型定义为什么要有内存模型为什么要重排序,重排序在什么时候排如何约束重排序规则happens-before什么是顺序一致性CAS 实现的原理,是阻塞还是非阻塞方式?什么时候用,使用时需要考虑的问题处理器和 Java 分别怎么保证原子操作保证了原子性就能保证可见性吗?f ...
分类:
编程语言 时间:
2020-02-14 10:35:22
阅读次数:
75
悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。 传统的关系型数据库中用到了很多这种锁机制,比如行级锁、表级锁、读锁、写锁等,都是在做操作之前先上锁。 使用场景:多写的场景 实现方式:加锁 乐观锁 总是假设最好的情况,每次去拿数据的时候都认为别人不会修 ...
分类:
数据库 时间:
2020-02-13 23:17:36
阅读次数:
129
封锁粒度 MySQL提供了两种封锁粒度:行级锁、表级锁 应该尽量只锁定需要修改的那部分数据,而不是所有的资源。 锁定的数据量越少,发生锁争用的可能性就越小,系统的并发程度就越高。 但是加锁需要消耗资源,锁的各种操作(获取锁、释放锁、检查锁状态)都会增加系统开销。 因此封锁粒度越小,系统开销就越大。 ...
分类:
数据库 时间:
2020-02-13 19:34:32
阅读次数:
93
工作中经常会出现一些模版代码,这些代码其实没有什么新鲜,都是老套的代码反复使用,比如在调用rpc方法之后的异常处理与日志打印,使用redis加锁与解锁,给一个线程插入log_id... 先说一下使用模版的好处 1. 编码速度 我们可以通过官方的实例看一下使用效果,输入几个关键字符就可以自动生成大段的 ...
分类:
其他好文 时间:
2020-02-13 19:24:52
阅读次数:
77
现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 1. 互斥性,同一时刻,只能有一个客户端持有锁。 2. 防止死 ...
分类:
其他好文 时间:
2020-02-12 14:51:57
阅读次数:
130
本文以 MySQL 数据库InnoDB引擎为例,为大家分析InnoDB数据库引擎对默认的隔离级别可重复读(RR)的具体实现。
分类:
数据库 时间:
2020-02-10 19:43:40
阅读次数:
102