![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
binling
这个作者很懒,什么都没留下…
展开
-
如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
读写锁读写锁并没有分拆锁定粒度,而是区分操作的性质,读与读可以并发,读-写,写-写互斥,只有写是独占锁。分拆锁和分离锁的思想都是对于复杂数据机构,不同的部分对应不同的锁,降低锁的粒度分拆锁,splitingLock独立不相关的数据用不同的锁,比如一个对象有很多字段,这些字段是独立的,而不是组合起来表示一个逻辑数据(比如firstName, lastName,必须组合起来表示原创 2015-07-22 17:53:28 · 3145 阅读 · 0 评论 -
等待锁和等待条件、临界区实现、读写锁实现
之前总结过,线程的halt只有两种可能,等待锁(lock.lock(), synchronized(lock))和等待条件(condition.await(), object.wait())其他的synchronizer,比如CountDownLatch, Barrier,BlockingQueue等,都是基于等待条件的,可以用condition实现。而condition又以锁为基础,cond原创 2015-11-23 00:35:26 · 1970 阅读 · 0 评论 -
死锁怎么检测?
先OO分析、建模,再研究具体问题。这里面涉及的对象:1)线程2)锁关系:占有:线程——锁 的一对多关系:一个线程可以占有多个锁,一个锁只能被一个线程占有等待:线程——锁 的多对多关系:一个线程可以等待多个锁,一个锁可以被多个线程等待间接等待关系 线程——线程 的多对多关系,一个线程A等待的锁被另一个线程B拥有,则线程A对线程B有等待关系输入模型:线程列表,锁列表原创 2015-10-09 15:51:05 · 2937 阅读 · 0 评论 -
Java中 Happen-before 规则总结
详细见:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html比较重要的几条1)Actions prior to "releasing" synchronizer methods such as Lock.unlock,Semaphore.release, and CountD原创 2015-12-18 16:20:39 · 1497 阅读 · 0 评论 -
多线程、锁,可重入,同步,原子性,可见性,非阻塞算法
问题1 什么是Re-entrant Lock锁的acquire是per thread 的, 而不是per call的,也就是同一个线程再次申请已经获得的锁,直接成功返回。如果是非re-entrant的锁,一个线程试图获取已经获得的锁会死锁,因为当前线程会挂起,没有机会release锁synchronized的锁和 ReentrantLock都是 Re-entrant Lock问原创 2015-07-15 19:20:23 · 1507 阅读 · 0 评论 -
Java各种Synchronizer: CountDownLatch, CyclicBarrier,Semaphore
首先,锁也是一种Synchronizer ,包括ReentrantLock, synchronized,是为了确保共享数据被完整一致的修改,不被破坏。其他的,比如Object.wait(), notify()等 主要用于合作的线程之间彼此协调CountDownLatch有两个方法await() 和countDown(),用于主线程调用latch.await(),每个原创 2015-07-22 20:48:29 · 508 阅读 · 0 评论 -
BigArray算法核心
几个Object: logical array, paged index files, data filesLogical Array: 1) head index: next array index to append2) tail index: start index of the array, typically 0, if not wrapped这两个是logica原创 2016-03-21 17:23:23 · 550 阅读 · 0 评论 -
几种自旋锁SpinLock,TicketLock,CLHLock,以及可重入实现要点,非阻塞锁实现要点
最核心的东西:synchronization state,同步状态:指示当前线程是否可以proceed还是需要wait的状态。1.普通SpinLock (支持可重入的版本)class SpinLock { private AtomicReference owner = new AtomicReference(); // use thread itself as synchronizat原创 2015-12-28 17:03:22 · 5313 阅读 · 3 评论 -
FixedTTLCache实现
所有item的TTL都一样,比如所有的http session的过期时间默认30分钟,idle超过30分钟就失效。相对的是每个item指定TTL的缓存。实现和LRU类似,都是map + list,不同的是触发机制不是容量满,而是idle时间。专门一个线程check,这里也利用了队列能维护先后顺序的性质,对头是最老的,如果队头都没过期,其他的都不可能过期,而且check线程会wait这个时间差再原创 2015-10-28 17:22:15 · 588 阅读 · 0 评论 -
什么是Service, 以及Service 模板
Service本质就是一个驻留Process,驻留Prcess至少有一个驻留线程,这个线程处在waiting的状态(相对于Runable),控制流停在某个点上,受外部事件驱动,或者是自己的timer驱动。Windows Service是一个exe,要有Main方法,Main方法要把一个继承了ServiceBase、实现了OnStart(), OnStop()等生命周期回调方法的Servic原创 2015-09-08 16:13:08 · 1155 阅读 · 0 评论 -
我的java DCL-based Singleton
1)instance完全创建好了,另一个线程得到的还是null:用volatile解决2)对象内存块地址赋给了instance,但对象还没完全construct完毕:先访问一下对象,再赋instance,class Singleton { private volatile Singleton instance = null; private Singleton() {} public原创 2015-12-21 15:59:55 · 451 阅读 · 0 评论