
java并发
文章平均质量分 79
search_forever
StayHungry,StayFoolish.
展开
-
java锁
转载:转载地址转载:转载地址转载:转载地址以下为备份:Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以转载 2018-03-27 17:45:54 · 148 阅读 · 0 评论 -
ConcurrentHashMap与synchronizedMap比较分析
synchronizedMap类采用装饰器模式,通过synchronized关键字将原有的Map类(如HashMap)方法进行同步,保证了多线程情况在访问该同步类时的串行化,从而保证了线程安全。这种方式实现较为简单,但是可伸缩性较低,当多个线程同时请求访问该同步容器类的对象时,效率较低。ConcurrentHashMap类是为实现高并发而设计的类,它采用了分段锁的设计,从而使得多个线程在访问该原创 2018-03-28 14:10:33 · 735 阅读 · 0 评论 -
闭锁CountDownLatch
闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,任何线程都不能够通过,当闭锁到达结束状态时,才会允许线程通过。闭锁可以确保一些活动在另一些活动结束后才执行。举个例子:运动会时百米赛跑,每位运动员都是一个线程,在起跑线出准备冲刺。但是信号枪不响,所有的运动员都要呆在起跑线上不动。直到信号枪打响的一瞬间,运动员才能开始赛跑。这个信号枪就是闭锁。不同的是,闭锁可以设置一个数量。比原创 2018-03-28 17:38:38 · 169 阅读 · 0 评论 -
信号量Semaphore(计数器)
计数信号量用来控制同时访问某个特定资源的操作数量或者同时执行某个指定操作的数量。可以用来实现资源池或者给容器加边界。Semaphore用来实现有边界的容器public class SemaphoreTest { public static void main(String[] args) { BoundedHashSet bhs = new BoundedHashSet(1原创 2018-03-28 21:13:54 · 780 阅读 · 0 评论 -
AtomicInteger源码分析
在java的并发包中提供了大量的原子变量类,这些类提供的方法都保证了原子性。下面我们看一下AtomicInteger类的实现方式:首先看一下compareAndSet()方法:public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(t原创 2018-03-27 10:15:09 · 150 阅读 · 0 评论 -
自定义线程池阻塞式提交任务
public class ContentIndexBuilder { /** * 自定义执行器,该执行器具有有界的阻塞式队列,同时具有自定义的阻塞式拒绝执行执行器(也可以使用 * {@link ThreadPoolExecutor.CallerRunsPolicy},这种拒绝执行策略在任务队列满后会使任务在调用线程中执行) * * 这种方式可以避免任务无限制的迅速提交,同时避原创 2018-03-29 14:43:02 · 1219 阅读 · 1 评论 -
ThreadPoolExecutor源码解析(转载)
转载地址转载地址线程池能够对线程进行有效的管理, 复用和数量上限的限制, 如果你需要创建多个线程来执行多个异步任务, 那么使用线程池显然要比频繁地 new Thread().start() 这种方式要好.Java 中的线程池是用 ThreadPoolExecutor 类来表示的. 我们今天就结合该类的源码来分析一下这个类内部对于线程的创建, 管理以及后台任务的调度等方面的执转载 2018-04-19 17:53:42 · 418 阅读 · 0 评论