04 2016 档案

摘要:线程池 API 大多数并发应用程序是围绕执行任务(Task)进行管理的。把一个应用程序的工作(work)分离到任务中,可以简化程序的管理;这种分离还在不同事物间划分了自然的分界线,可以方便程序在出现错误时进行恢复;同时这种分离还可以为并行工作提供一个自然的结构,有利于提高程序的并发性。 所谓的任务拆 阅读全文
posted @ 2016-04-17 15:19 W焕 阅读(175) 评论(0) 推荐(0) 编辑
摘要:对于List或者Set 而言,增、删操作其实都是针对整个容器,因此每次操作都不可避免的需要锁定整个容器空间,性能肯定会大打折扣。要实现一个线程安全的List/Set,只需要在修改操作的时候进行同步即可, 比如使用java.util.Collections.synchronizedList(List) 阅读全文
posted @ 2016-04-17 15:18 W焕 阅读(432) 评论(0) 推荐(0) 编辑
摘要:Queue Queue并不是线程安全的,为了解决这个问题,引入了可阻塞的队列BlockingQueue。对于BlockingQueue 而言所有操作的是线程安全的,并且队列的操作可以被阻塞,直到满足某种条件。 ConcurrentLinkedQueue 一个基于链接节点的无界线程安全队列。此队列按照 阅读全文
posted @ 2016-04-17 15:07 W焕 阅读(318) 评论(0) 推荐(0) 编辑
摘要:Map 可用的线程安全版本Map 实现是ConcurrentHashMap/ConcurrentSkipListMap/Hashtable/Properties 四个,但是Hashtable 是过时的类库,因此如果可以的应该尽可能的使用ConcurrentHashMap 和ConcurrentSki 阅读全文
posted @ 2016-04-17 15:05 W焕 阅读(151) 评论(0) 推荐(0) 编辑
摘要:闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。也就是说闭锁的状态是一次性的,它确保在闭锁打开之前所有特定的活动都需要在闭锁打开之后才能完成。 CountDownLatch是 JDK 5+里面闭锁的一个实现,允许一个或者多个线程等待某个事件的发生。C 阅读全文
posted @ 2016-04-17 15:04 W焕 阅读(151) 评论(0) 推荐(0) 编辑
摘要:Condition 条件变量很大一个程度上是为了解决Object.wait/notify/notifyAll 难以使用的问题。 举例: Object.wait/notify/notifyAll表明只有持有锁的线程才可以调用 ,而synchronized表示加锁, 在生产者和消费者(只有一个产品),因 阅读全文
posted @ 2016-04-17 15:04 W焕 阅读(149) 评论(0) 推荐(0) 编辑
摘要:java.util.concurrent.locks.Lock API void lock();//获取锁。如果锁不可用,出于线程调度目的,将禁用当前线程,并且在获得锁之前,该线程将一直处于休眠状态。 void lockInterruptibly() throws InterruptedExcept 阅读全文
posted @ 2016-04-17 15:03 W焕 阅读(144) 评论(0) 推荐(0) 编辑
摘要:并发的多面性 并发通常提高运行在 单处理器 上的程序的性能,如果没有任务阻塞,单处理器上的并发就没有意义 阻塞阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,CPU不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。 1. 同步,就是调用一个功 阅读全文
posted @ 2016-04-17 15:02 W焕 阅读(214) 评论(0) 推荐(0) 编辑
摘要:Atomic java.util.concurrent 是基于Queue 的并发包,而Queue,很多 情况下使用到了Atomic 操作。通常情况下,在Java里面在没有额外资源可以利用的情况下,只能使用加锁才能保证读 改 写这三个操作时“原子”的。则需要使用synchronized和volatil 阅读全文
posted @ 2016-04-17 15:00 W焕 阅读(277) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示