ReentrantLock实现了标准的互斥锁:一次最多只有一个线程能够持有相同ReentrantLock。但是互斥通常做为保护数据一致性的很强的加锁约束,因此,过分的限制了并发性。互斥是保守的加锁策略,避免了 “写/写”和“写/读"的重读,但是同样避开了"读/读"的重叠。在很多情况下,数据结构是”频 ...
分类:
其他好文 时间:
2020-01-28 20:53:51
阅读次数:
58
前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识。行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高。 0.准备 \ 1.创建相关测试表tb_innodb_lock,注意数据库引擎为InnoDB。 \ 2.创建索引。 1.行锁定基本演示 \ ...
分类:
其他好文 时间:
2020-01-28 18:59:57
阅读次数:
92
1. 计算阶乘 package main import ( "fmt" _ "time" "sync" ) //需求:现在要计算 1-200 的各个数的阶乘,并且把各个数的阶乘放入到map中。 //最后显示出来。要求使用goroutine完成 //思路 //1. 编写一个函数,来计算各个数的阶乘,并 ...
分类:
其他好文 时间:
2020-01-27 09:25:24
阅读次数:
108
转自公众号Java建设者 ,作者cxuan Java 锁分类 Java 中的锁有很多,可以按照不同的功能、种类进行分类,下面是我对 Java 中一些常用锁的分类,包括一些基本的概述 https://www.javashitang.com/wp content/uploads/2020/01/beep ...
分类:
编程语言 时间:
2020-01-26 20:39:58
阅读次数:
76
类的加载过程 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过下面三个步骤对该类进行 初始化: 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象 链接:将java类的二进制代码合并到 ...
分类:
编程语言 时间:
2020-01-26 16:01:17
阅读次数:
83
什么是synchronized? synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完 ...
分类:
其他好文 时间:
2020-01-25 23:31:42
阅读次数:
93
所有文章 https://www.cnblogs.com/lay2017/p/12078232.html 正文 在上一篇文章中,我们简单了解了一下innodb的行级锁(s锁、x锁)和表级锁(is锁、ix锁)的概念以及锁之间的兼容关系。 本文,将了解一下innodb的几种加锁的情况: 常见的加锁 1) ...
分类:
数据库 时间:
2020-01-24 22:26:53
阅读次数:
120
前言 我们使用加锁机制来保证线程安全,但是如果过度地使用加锁,则可能会导致死锁。下面将介绍关于死锁的相关知识以及我们在编写程序时如何预防死锁。 什么是死锁 学习操作系统时,给出死锁的定义为两个或两个以上的线程在执行过程中,由于竞争资源而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。简化一 ...
分类:
编程语言 时间:
2020-01-23 09:20:00
阅读次数:
68
MySQL版本:5.6 注意点: 单纯的 SELECT 不会加锁,INSERT UPDATE DELETE 默认加 X 。 文中的读都不是单纯 SELECT ,单纯的 SELECT 任何时候都可以进行。 共享锁 shared(S) lock 定义:A shared (S) lock permits ...
分类:
数据库 时间:
2020-01-22 20:00:04
阅读次数:
105
使用锁能解决并发时线程安全性,但锁的代价比较大,而且降低性能。有些时候可以使用原子类(juc atomic包中的原子类)。还有一些其他的非加锁式并发处理方式,我写这篇文章来源于 "Java中有哪些无锁技术来解决并发问题" 的思考。 1.原子类场景 2.原子类分类 3.原子类实现原理 4.原子类使用d ...
分类:
编程语言 时间:
2020-01-22 18:10:33
阅读次数:
69