上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: condition是对线程进行控制管理的接口,具体实现是AQS的一个内部类ConditionObject,主要功能是控制线程的启/停(这么说并不严格,还要有锁的竞争排队)。 condition主要方法: void await() throws InterruptedException 进入等待,直到 阅读全文
posted @ 2018-11-04 21:26 facelessvoidwang 阅读(2735) 评论(0) 推荐(2) 编辑
摘要: 读写锁,对于读操作来说是共享锁,对于写操作来说是排他锁,两种操作都可重入的一种锁。底层也是用AQS来实现的,我们来看一下它的结构跟代码: 读写锁,当然要区分读跟写两种操作,因此其内部有ReadLock跟WriteLock两种具体实现。但两者也有交互的地方,比如获取写锁要判断当前是否有线程在读,有的话 阅读全文
posted @ 2018-11-04 21:13 facelessvoidwang 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 参考文章:https://www.cnblogs.com/charlesblc/p/5994162.html 刚开始认识volatile的时候,觉得对它的一些特性非常迷惑。比如:具有可见性,如果一个线程修改了volatile变量的值,那么其它线程也会发现这一点;同时它又不具有原子性,多个线程对被vo 阅读全文
posted @ 2018-10-28 11:08 facelessvoidwang 阅读(2844) 评论(0) 推荐(2) 编辑
摘要: 本部分主要参考《java并发编程艺术》一书相关内容,同时参考https://blog.csdn.net/zhilinboke/article/details/83104597,说的非常形象。 重入锁就是支持重入的锁,它表示该锁支持一个线程对资源的重复加锁。比如之前的在读AQS时的Mutex,在loc 阅读全文
posted @ 2018-10-26 10:04 facelessvoidwang 阅读(467) 评论(0) 推荐(0) 编辑
摘要: 接下来从实现角度来分析同步器是如何完成线程同步的。主要包括:同步队列、独占式同步状态获取与释放、共享式同步状态获取与释放以及超时获取同步状态等。 1、同步队列 同步器依赖内部的一个同步队列来完成同步状态的管理。当线程获取同步状态失败时,会被加入到队列中,并同时阻塞线程。当同步状态释放时,会把首节点中 阅读全文
posted @ 2018-10-25 10:22 facelessvoidwang 阅读(1800) 评论(0) 推荐(0) 编辑
摘要: 今天碰到一个面试题觉得挺有意思,特来记录一下. 有一给定数组,按锯齿形状排列数组元素。比如a<b>c<d>e<f>g .... 以此类推。给定数组:{1, 2, 3, 4, 5, 6, 7, 8, 9}, 请编程。 刚看到这个题目觉得挺新颖的,平常见到都会从大到小或者从小到大,这个来个锯齿的,这不按 阅读全文
posted @ 2018-10-18 17:18 facelessvoidwang 阅读(349) 评论(0) 推荐(0) 编辑
摘要: AQS是用来构建锁或者其它同步组件的基础框架,它使用一个int变量来表示同步状态,通过内置的FIFO队列来完成获取线程的排队工作,concurrent包的作者Doug Lea期望它能称为实现大部分同步需求的基础。 同步器的使用方式是继承,子类通过继承AQS并实现它的相关方法来管理同步状态,在子类方法 阅读全文
posted @ 2018-10-16 21:11 facelessvoidwang 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 高效并发是jdk1.5到1.6的一个重要改进,hotspot虚拟机开发团队在这个版本上花费了大量精力去实现各种锁优化技术,例如:适应性自旋、锁消除、锁粗化、轻量级锁跟偏向锁等,这些技术都是为了在线程间更高效的共享数据,以解决竞争问题,从而提高程序执行效率。 自旋锁与自适应自旋: 虚拟机开发团队注意到 阅读全文
posted @ 2018-09-20 18:05 facelessvoidwang 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 了解了什么是线程安全之后,接下来就是如何实现线程安全。那么了解虚拟机提供的同步机制以及锁机制也就非常重要了。 1、互斥同步 互斥同步是指多个线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用。在这个地方,互斥是因,同步是果;同步的实现方式是通过互斥来实现的;常见的互斥实现方式有:临界区( 阅读全文
posted @ 2018-09-09 16:41 facelessvoidwang 阅读(983) 评论(0) 推荐(1) 编辑
摘要: 之所以用k8s来部署应用,就是因为k8s可以灵活的控制集群规模,进行扩充或者收缩。生产上我们要配置的参数较多,命令行的方式显然不能满足需求,我们应该使用基于配置文件的方式。接下来做一个部署的demo: 场景:一个数据库,一个应用程序,数据库要暴露接口,并把数据挂载到物理机上,应用程序连接数据库,正常 阅读全文
posted @ 2018-09-01 11:36 facelessvoidwang 阅读(500) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页