![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
文章平均质量分 82
登天蚂蚁
蜂采百花蜜酿成,为谁辛苦为谁甜
展开
-
CopyOnWrite分析
定义:CopyOnWrite机制称为写时复制,理解起来很简单,就是执行修改操作时进行底层数组复制,使得修改操作在新的数组上进行,不妨碍原数组的并发读操作,复制修改完成后更新原数组引用变量。原理:每个修改之前都加上ReentrantLock使并发写操作互斥执行,避免多次数据复制修改。所以能够实现读写分离,但是写写同步执行。读写并发环境中,在将原数组对象引用变量更新为复制修改完成后的数组对原创 2016-07-23 15:09:53 · 6925 阅读 · 0 评论 -
wait()、sleep()以及yield()函数
wait()、sleep()以及yield()三个函数都可以实现任务的暂停执行,只是根据不同的出发点,调用不同的函数实现效果不同。sleep()静态函数常用形式,指定毫秒数public static void sleep(long millis) throws InterruptedException指定毫秒数以及精确的纳秒(第二个参数为int类型,因为纳秒数范围[0-9999原创 2016-07-02 14:43:20 · 508 阅读 · 0 评论 -
Lock、Condition
因为虚拟机的优化技术,使用synchronized锁带来的性能开销越来越低,也不再是之前所谓的重量级锁。但是其本身的加锁机制限制了在灵活性和细粒度方面的拓展,例如在阻塞等待获取锁时不能响应中断(当然可以添加额外的代码实现响应中断),并且synchronized维持的是一种排他锁,在加锁的策略中没有考虑任务的类型。在JDK1.5之后引入locks包,作为对加锁策略一个补充,synchronize原创 2016-07-02 17:42:08 · 348 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier和Semaphore
CountDownLatch和CyclicBarrier作为协调线程运行顺序的控制机制,Semaphore一般用作资源限制访问条件。CountDownLatch常用方法有public CountDownLatch(int count)public void await() throws InterruptedExceptionpublic boolean await(long ti原创 2016-07-03 13:41:14 · 378 阅读 · 0 评论 -
线程池
线程池作为一种线程资源管理机制,引入的出发点是将任务的执行和提交分离。任务的执行一般不会在当前线程(调用者线程)中进行,而是委托为一个服务,例如线程池。利用Executor框架构造线程池,实现对任务的执行策略的管理,在ExecutorService中提供了对线程池本身的管理。线程作为一个大对象,构造对象和回收对象都是需要一定资源消耗,线程池可以实现对线程对象的重复利用,以此削减执行任务需要的时原创 2016-07-07 00:13:41 · 356 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们转载 2016-07-07 06:52:31 · 374 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对ThreadLocal的理解 二.深入解析ThreadLocal类转载 2016-07-07 06:55:40 · 604 阅读 · 0 评论 -
HashMap与Hashtable(一)
HashMap和Hashtable作为保存键值对的容器,都是使用一个Entry数组,Entry元素本身又是一个链式结构,所以实现数据结构相同,都是一个数组-链表形式。HashMap主要的属性:static final int DEFAULT_INITIAL_CAPACITY = 16;//默认容量,2的整数次幂static final int MAXIMUM_CAPACITY = 1原创 2016-07-14 20:12:26 · 362 阅读 · 0 评论 -
HashMap与Hashtable(二)
Hashtable与HashMap相同的地方很多,底层数据结构相同,解决散列冲突的方式相同,主要的不同在于Hashtable是线程安全的,当然现在的线程安全定义很泛滥,vector、Hashtable都可以说是线程安全的,不过就是在方法上加上synchronized修饰词,以同步的方式使用。在实际使用时仍然需要额外的代码保证,否则依然会抛出错误vector示例:public class t原创 2016-07-15 20:21:20 · 444 阅读 · 0 评论 -
synchronized、wait、notify、notifyAll
因为同一个进程的线程之间可以共享同一个进程空间,所以实现线程的数据共享是很容易的(当然在并发中实现数据结构的一致性则另当别论),也可以使用管道流来进行线程通信(没必要)。此处只说协调控制机制synchronized、wait、notify、notifyAll使用Java语言内置关键字synchronized来进行加锁,可以保证任务执行的可见性和原子性,从而实现同步执行。synchroniz原创 2016-07-02 11:44:20 · 423 阅读 · 0 评论