实现锁: 1.同步代码块: 2.同步方法:在方法的头部加上synchronized 3.Lock:功能比synchronized更加的强大,但是加锁的时一定不要忘记解锁unlock(); 在使用lock锁时,想要实现睡眠唤醒功能,就要使用condition,对应的方法是await(),singal( ...
分类:
编程语言 时间:
2019-09-03 16:42:38
阅读次数:
126
1、基础属性 2、Segment结构 3、HashEntry结构 4、构造函数 5、put方法 6、size计算:在不加锁的情况下先后计算两次,如果两次计算的modCount一致,则认为在统计的时间内,没有其它线程对该map修改或删除,直接返回size;如果两次计算的modCount不一致,则对所有 ...
分类:
其他好文 时间:
2019-09-02 17:30:47
阅读次数:
68
加锁目的:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问。 加锁方式:java锁分为两种--显示锁和隐示锁,本质区别在于显示锁需要的是程序员自己手动的进行加锁与解锁如ReentrantLock需要进行lock与unlock。而隐式锁则是Synchronized,jvm内 ...
分类:
其他好文 时间:
2019-09-02 17:03:05
阅读次数:
82
Lock的使用 代码: 结果: lock与synchronized的区别 lock 获取锁与释放锁的过程,都需要程序员手动的控制 Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就 是CAS操作 synchr ...
分类:
编程语言 时间:
2019-09-01 10:28:27
阅读次数:
59
Zookeeper是如何实现分布式锁的 标签 : Zookeeper 分布式 实现分布式锁要考虑的重要问题 1. 三个核心要素 加锁, 解锁, 锁超时 2. 三个问题 要保证原子性操作, 加锁和锁超时的操作要一次性执行完毕 防止误删锁 在误删的基础上, 加一个守护线程, 为锁续命. 什么是临时顺序节 ...
分类:
其他好文 时间:
2019-08-31 23:43:06
阅读次数:
144
一 基本安全措施 1.系统账号清理 (1)将用户登录的shell 设为::::: usermod -s chsh 交互式修改 chsh -s (2)锁定用户账号 passwd -l (-u 解锁) usermod -L (-U 解锁) (3)删除无用账号 userdel (4)锁定账号文件 加i锁 ...
分类:
系统相关 时间:
2019-08-31 14:52:54
阅读次数:
115
如何确保N个线程可以访问N个资源同时又不导致死锁?使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。2.如何权衡是使用无序的数组还是有序的数组?有序数组最大的好处在于查找的时间复杂度是O(logn),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的
分类:
编程语言 时间:
2019-08-31 13:14:58
阅读次数:
93
并行相关概念 同步和异步 同步和异步通常来形容一次方法的调用。同步方法一旦开始,调用者必须等到方法结束才能执行后续动作;异步方法则是在调用该方法后不必等到该方法执行完就能执行后面的代码,该方法会在另一个线程异步执行,异步方法总是伴随着回调,通过回调来获得异步方法的执行结果。 并发和并行 很多人都将并 ...
分类:
编程语言 时间:
2019-08-31 12:27:48
阅读次数:
80
之前一直对锁的知识半知半解,写篇博客巩固下。 1、悲观锁、乐观锁 悲观锁每次操作都会加锁,会造成线程堵塞。而乐观锁则是假设不会冲突,每次操作都不会加锁。所以相较而言,乐观锁比较适合于竞争较少的场景,悲观锁比较适合竞争严重的情况。 2、公平锁、非公平锁 如果多个线程按照申请锁的顺序来获取锁,则是公平锁 ...
分类:
编程语言 时间:
2019-08-31 00:50:34
阅读次数:
78
缓存雪崩 缓存雪崩是由于原有缓存失效(过期),新缓存未到期间。所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 解决方法: 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。 给每一个缓存数据增加相应的缓存标记,记 ...
分类:
其他好文 时间:
2019-08-30 23:11:05
阅读次数:
102