本身不是锁,但是经常和锁结合使用 使用流程: 1. 创建 条件变量:var cond sync.Cond 2. 指定条件变量用的 锁: cond.L = new(sync.Mutex) 3. cond.L.Lock() 给公共区加锁(互斥量) 4. 判断是否到达 阻塞条件(缓冲区满/空) —— fo ...
分类:
其他好文 时间:
2019-08-04 01:15:38
阅读次数:
92
1.synchronized的3种用法 (1)修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁(2)修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 。也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员( sta ...
分类:
编程语言 时间:
2019-08-02 00:29:59
阅读次数:
247
一、innodb: mysql默认搜索引擎; 特点: (1)支撑事务,可以在事务上添加锁; (2)锁方式: 1)共享锁(乐观锁):对查询共享,对增删改上锁。//当提交事务时会释放锁。 2)排它锁(排他锁):对增删改查全部上锁。 ps: 1)行锁只有InnoDB有; 2)提交事务就是释放锁; 3)锁需 ...
分类:
数据库 时间:
2019-07-31 23:44:19
阅读次数:
121
MyISAM与InnoDB关于锁方面的区别MyISAM与InnoDB关于锁方面的区别:MyISAM默认使用的是表级锁,不支持行级锁InnoDB默认用的是行级锁,也支持表级锁InnoDB支持事务,在事务中被加锁的数据行需要等事务commit之后才会统一解锁,否则不会解锁。而MyISAM不支持事务,所以不会有这个问题MyISAM和InnoDB都支持共享锁和排他锁,读锁共享,写锁排他InnoDB在开启事
分类:
数据库 时间:
2019-07-28 22:51:35
阅读次数:
259
JDK内部的“锁”优化策略 1. 锁偏向 锁偏向是针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样就节省了大量有关锁申请的操作,从而提高了程序的性能。对几乎没有锁竞争的场合,偏向锁有很好的优化效果,对于锁竞争激烈的场合 ...
分类:
编程语言 时间:
2019-07-28 20:19:58
阅读次数:
110
从JDK1.5开始,Java提供了java.util.concurrent.atomic包,该包中的原子操作类提供了一种使用简单、性能高效(使用CAS操作,无需加锁)、线程安全地更新一个变量的方式。 `java.util.concurrent.atomic`包中的类.png 根据变量类型的不同,At ...
分类:
编程语言 时间:
2019-07-28 14:03:09
阅读次数:
110
<! TOC "1. 本文地址" "2. 对象的作用及为何只要一个对象" "3. 懒汉式" "4. 饿汉式" "4.1. 未加锁版" "4.2. 加锁版" <! /TOC 1. 本文地址 1. 博客园: "https://www.cnblogs.com/coco56/p/11253656.html" ...
分类:
编程语言 时间:
2019-07-27 09:35:17
阅读次数:
142
众所周知, 在多线程中,因为共享全局变量,会导致资源修改结果不一致,所以需要加锁来解决这个问题,保证同一时间只有一个线程对资源进行操作 但是在分布式架构中,我们的服务可能会有n个实例,但线程锁只对同一个实例有效,就需要用到分布式锁 redis setnx 原理: 修改某个资源时, 在redis中设置 ...
分类:
编程语言 时间:
2019-07-27 09:27:50
阅读次数:
82
Q1:为什么非常高的并发请求下AtomicLong的性能会有很大影响?有没有什么更好的替代方案? 虽然AtomicLong使用CAS但是CAS失败后还是通过无限循环的自旋锁不断尝试的,在高并发下N多线程同时去操作一个变量会造成大量线程CAS失败然后处于自旋状态,这大大浪费了CPU资源,降低了并发性。 ...
分类:
编程语言 时间:
2019-07-24 00:28:26
阅读次数:
126