故事起源于上次阿里电面的3个问题。问题1,jvm中线程分为哪些状态。问题2,在执行Thread.start()方法后,线程是不是马上运行。问题3,java中的synchronized和ReentrantLock有什么不同。当时我的回答不是很好,就不说了,面试之后,在网上搜了很多文章,对照着jdk源码 ...
分类:
其他好文 时间:
2019-12-11 19:35:01
阅读次数:
93
看如下一条sql语句:#tableT(idint,namevarchar(20))deletefromTwhereid=10;MySQL在执行的过程中,是如何加锁呢?在看下面这条语句:select*fromTwhereid=10;那这条语句呢?其实这其中包含太多知识点了。要回答这两个问题,首先需要了解一些知识。相关知识介绍多版本并发控制在MySQL默认存储引擎InnoDB中,实现的是基于多版本的并
分类:
数据库 时间:
2019-12-11 19:07:00
阅读次数:
96
全局解释器锁 每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁。好处:避免了大量的加锁解锁的好处。使数据更加安全,解决多线程间的数据完整性 ...
分类:
其他好文 时间:
2019-12-09 21:39:18
阅读次数:
116
前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的。本文是AQS系列的第一篇,后面会持续更新多篇,争取将JUC包中AQS相关的常用功能讲清楚,一方面巩固自己的知识体系,一方面亦可与各位园友互相学习。寒 ...
分类:
其他好文 时间:
2019-12-07 23:22:00
阅读次数:
123
aqs实现 基于以下技术栈: 1、自旋 2、park,unpark 3、cas 有什么特点: 1、如果是单个线程的话,或者线程交替执行,那么使用的jvm来实现的,并没有动用到os层 加锁过程: 1、判断当前状态,如果锁现在的状态为0(自由状态),公平锁可能需要判断是否需要排队(hasQueuePro ...
分类:
其他好文 时间:
2019-12-06 19:15:37
阅读次数:
87
aqs实现 基于以下技术栈: 1、自旋 2、park,unpark 3、cas 有什么特点: 1、如果是单个线程的话,或者线程交替执行,那么使用的jvm来实现的,并没有动用到os层 加锁过程: 1、判断当前状态,如果锁现在的状态为0(自由状态),公平锁可能需要判断是否需要排队(hasQueuePro ...
分类:
其他好文 时间:
2019-12-06 19:02:27
阅读次数:
100
redis加锁的几种实现 2017/09/21 redis加锁的几种实现 2017/09/21 redis加锁的几种实现 1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初 ...
分类:
其他好文 时间:
2019-12-06 11:20:33
阅读次数:
109
1.synchronized可以使用任意的Object进行加锁,用法比较灵活 另外特别注意一个问题,就是不要使用String常量加锁,会出现死循环 输出结果: 永远都是t1开始,t1结束,没有t2什么事,这是什么原因呢? String在常量池中只有一个引用,所以尽量不要用字符串常量去加锁 可以采用如 ...
分类:
其他好文 时间:
2019-12-04 10:36:15
阅读次数:
104
本文主要涉及以下几个个部分: 1. 为什么要加锁 2. 锁的分类 3. 常见语句的加锁分析 4. 如何分析死锁 5. 如何预防死锁 先列出本地的运行环境 数据库版本是5.7,隔离级别是Repeatable-Read(可重复读),不同的数据库版本和隔离级别对语句的执行结果影响很大。所以需要说明版本和隔 ...
分类:
其他好文 时间:
2019-12-02 16:55:27
阅读次数:
109
前言 本篇主要介绍一下synchronized的批量重偏向和批量撤销机制,属于深水区,大家提前备好氧气瓶。 说完synchronized锁的膨胀过程,下面我们再延伸一下synchronized锁的两种特殊处理,一种是锁的批量重偏向,一种是锁的批量撤销。JVM中有两个参数,BiasedLockingB ...
分类:
编程语言 时间:
2019-12-01 21:24:32
阅读次数:
125