临界资源问题的原因:某一个线程在对临界资源进行访问时,还没来得及完全修改临界资源的值,临界资源就被其他线程拿去访问,导致多个线程访问同一资源。直观表现为打印结果顺序混乱。 解决方法:加锁 静态方法中用类锁,非静态方法中用对象锁。 1.同步代码段:synchronized(){...}2.同步方法:使 ...
分类:
编程语言 时间:
2020-02-10 10:08:53
阅读次数:
99
一、临界区与竞争条件 临界区就是访问和操作共享数据的代码段。 如果两个执行线程有可能处于同一临界区中同时执行,那么我们就称它们为竞争条件(race conditions) 避免并发和防止竞争条件称为同步(synchronization) 二、加锁 2.1 锁的介绍 我们需要一种方法确保一次有且只有一 ...
分类:
其他好文 时间:
2020-02-08 17:12:15
阅读次数:
56
有时候需要保证同时只能有一个进程存在, 类似singleton的概念. 这时候简单方法就是对文件尝试加锁, 加锁成功就继续, 否则退出 函数定义如下: 锁是和内核的file entry绑定, 因此指向相同file entry的fd是共享一个锁的. 比如父子进程, 或者通过dup复制的fd, 由于指向 ...
分类:
其他好文 时间:
2020-02-08 13:22:24
阅读次数:
75
[toc] 1.redis的应用场景 商品秒杀 点赞等 现在有一个减少商品的场景,我们很容易能写出其代码 但是有一个问题,该程序单机下线程不安全。不过可以解决:加锁 加锁解决了单机的线程安全的问题,但是在集群的情况下线程依旧不安全,因为集群的情况下有多个服务器同时运行那么依然会产生线程安全问题; 因 ...
分类:
编程语言 时间:
2020-02-08 00:10:07
阅读次数:
100
Redis缓存知识问题缓存穿透:条件:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁***我们的应用,这就是漏洞。解决方案:有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有
分类:
其他好文 时间:
2020-02-07 20:51:23
阅读次数:
52
SDWebImageNSCache类似可变字典,线程安全,使用可变字典自定义实现缓存时需要考虑加锁和释放锁在内存不足时NSCache会自动释放存储的对象,不需要手动干预NSCache的key不会被复制,所以key不需要实现NSCopying协议第三方框架网络1.PPNetworkHelper对AFN... ...
分类:
移动开发 时间:
2020-02-06 12:46:52
阅读次数:
97
1、Redis 的并发竞争 Key :多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同! 2、解决方式: 分布式锁(zookeeper 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并发竞争 Key 问题,不要使用分布式锁,这 ...
分类:
其他好文 时间:
2020-02-05 20:34:09
阅读次数:
82
Lock(锁): 从JDK5.0开始,Java提供了更强大的线程同步机制——通过显示定义同步锁对象来实现同步,同步锁使用Lock对象充当 java.util.concurrent.locks.Lock接口是控制多个线程对共享线程进行了访问的工具。锁提供了对共享资源的独占访问,每次只有一个线程对Loc ...
分类:
编程语言 时间:
2020-02-04 20:22:52
阅读次数:
99
在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证每个用户能以一致的方式读取和修改数据,就引入了锁机制。 在 MySQL 数据库中,锁有很多种类型,不 ...
分类:
数据库 时间:
2020-02-04 11:06:22
阅读次数:
73
面试官:带笔了吧,那写两种单例模式的实现方法吧 沙沙沙刷刷刷~~~ 写好了 面试官:你这个是怎么保证线程安全的,那你知道,volatile 关键字? 类加载器?锁机制???? 点赞+收藏 就学会系列,文章收录在 GitHub "JavaEgg" ,N线互联网开发必备技能兵器谱 单例模式——独一无二的 ...
分类:
其他好文 时间:
2020-02-03 22:53:59
阅读次数:
148