随笔分类 -  并发

JAVA并发编程的艺术 Java并发容器和框架
摘要:ConcurrentHashMap ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。 一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个Has 阅读全文

posted @ 2017-06-26 00:40 张小贱1987 阅读(249) 评论(0) 推荐(0)

JAVA并发编程的艺术 JMM内存模型
摘要:锁的升级和对比 java1.6为了减少获得锁和释放锁带来的性能消耗,引入了"偏向锁"和"轻量级锁"。 偏向锁 偏向锁为了解决大部分情况下只有一个线程持有锁的情况。 大概逻辑是:每次获得锁时,在锁的对象头信息中存储了当前线程的ID,下次获取锁的时候,不需首先使用CAS竞争锁,只需要去对象头里查看是否是 阅读全文

posted @ 2017-06-25 21:50 张小贱1987 阅读(277) 评论(0) 推荐(0)

Java并发编程实战 第16章 Java内存模型
摘要:什么是内存模型 JMM(Java内存模型)规定了JVM必须遵循一组最小保证,这组保证规定了对变量的写入操作在何时将对其他线程可见。 JMM为程序中所有的操作定义了一个偏序关系,称为Happens-Before。两个操作缺乏Happens-Before关系,则Jvm会对它们进行任意的重排序。 Happ 阅读全文

posted @ 2017-06-25 00:51 张小贱1987 阅读(191) 评论(0) 推荐(0)

Java并发编程实战 第15章 原子变量和非阻塞同步机制
摘要:非阻塞的同步机制 简单的说,那就是又要实现同步,又不使用锁。 与基于锁的方案相比,非阻塞算法的实现要麻烦的多,但是它的可伸缩性和活跃性上拥有巨大的优势。 实现非阻塞算法的常见方法就是使用volatile语义和原子变量。 硬件对并发的支持 原子变量的产生主要是处理器的支持,最重要的是大多数处理器架构都 阅读全文

posted @ 2017-06-25 00:13 张小贱1987 阅读(207) 评论(0) 推荐(0)

Java并发编程实战 第14章 构建自定义的同步工具
摘要:状态依赖性 定义:只有满足特定的状态才能继续执行某些操作(这些操作依赖于固定的状态,这些状态需要等待别的线程来满足)。 FutureTask,Semaphroe,BlockingQueue等,都是状态依赖性的类。 条件队列 条件对列:条件对列就是由于不满足继续的条件而被wait操作阻塞的线程队列。他 阅读全文

posted @ 2017-06-24 22:43 张小贱1987 阅读(184) 评论(0) 推荐(0)

Java并发编程实战 第13章 显式锁
摘要:接口Lock的实现类: ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock ReentrantLock java5.0之前只有synchronize和volatile,ReentrantLo 阅读全文

posted @ 2017-06-24 20:37 张小贱1987 阅读(171) 评论(0) 推荐(0)

Java并发编程实战 第11章 性能与可伸缩性
摘要:关于性能 性能的衡量标准有很多,如: 服务时间,等待时间用来衡量程序的"运行速度""多快"。 吞吐量,生产量用于衡量程序的"处理能力",能够完成"多少"工作。 多快和多少有时候是互相矛盾的。 关于可伸缩性 可伸缩性:当增加计算资源(CPU 内存 存储 带宽)时,程序的吞吐量或者处理能力能够相应的增加 阅读全文

posted @ 2017-06-24 18:58 张小贱1987 阅读(146) 评论(0) 推荐(0)

Lock的await/singal 和 Object的wait/notify 的区别(转载)
摘要:在使用Lock之前,我们都使用Object 的wait和notify实现同步的。举例来说,一个producer和consumer,consumer发现没有东西了,等待,producer生成东西了,唤醒。 线程consumer 线程producer synchronize(obj){ obj.wait 阅读全文

posted @ 2017-06-24 00:53 张小贱1987 阅读(225) 评论(0) 推荐(0)

线程阻塞和挂起(网络收集)
摘要:线程阻塞 线程在运行的过程中因为某些原因而发生阻塞,阻塞状态的线程的特点是:该线程放弃CPU的使用,暂停运行,只有等到导致阻塞的原因消除之后才回复运行。或者是被其他的线程中断,该线程也会退出阻塞状态,同时抛出InterruptedException。 一般线程中的阻塞: A、线程执行了Thread. 阅读全文

posted @ 2017-06-24 00:46 张小贱1987 阅读(1753) 评论(0) 推荐(1)

Java并发编程实战 第10章 避免活跃性危险
摘要:死锁 经典的死锁:哲学家进餐问题。5个哲学家 5个筷子 如果没有哲学家都占了一个筷子 互相等待筷子 陷入死锁 数据库设计系统中一般有死锁检测,通过在表示等待关系的有向图中搜索循环来实现。 JVM没有死锁检测。 锁顺序死锁 典型的列子:LeftRightDeadLock,多个线程尝试去获取左右的锁。这 阅读全文

posted @ 2017-06-23 21:02 张小贱1987 阅读(210) 评论(0) 推荐(0)

Java并发编程实战 第8章 线程池的使用
摘要:合理的控制线程池的大小: 下面内容来自网络。不过跟作者说的一致。不想自己敲了。留个记录。 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析: 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。 任务的优先级:高、中、低。 任务的执行时间:长、中、短。 任务的依赖性:是 阅读全文

posted @ 2017-06-23 01:09 张小贱1987 阅读(870) 评论(0) 推荐(0)

Java并发编程实战 第6章 任务并行 第7章 取消与关闭
摘要:ExecutorCompletionService CompletionService用来接收一个Executor的执行结果,将已经完成任务,放置在可使用 take 访问的队列上。 大概用法: Executor e = Executors. newCachedThreadPool(); Comple 阅读全文

posted @ 2017-06-23 01:08 张小贱1987 阅读(167) 评论(0) 推荐(0)

Java并发编程实战 第5章 构建基础模块
摘要:同步容器类 Vector和HashTable和Collections.synchronizedXXX 都是使用监视器模式实现的。 暂且不考虑性能问题,使用同步容器类要注意: 只能保证单个操作的同步。 这会引起两个问题: 第一个问题: 如果有一个功能,需要计算得到最后一个的值,有这个方法: list. 阅读全文

posted @ 2017-06-23 01:07 张小贱1987 阅读(240) 评论(0) 推荐(0)

Java编程思想 第21章 并发
摘要:这是在2013年的笔记整理。现在重新拿出来,放在网上,重新总结下。 package thread; /** * * @author zjf * @create_time 2013-12-18 * @use测试基本的两种线程的实现方式 * 测试中断 */ public class BasicThrea 阅读全文

posted @ 2017-06-20 23:01 张小贱1987 阅读(613) 评论(0) 推荐(0)

Java并发编程实战 第4章 对象的组合
摘要:Java监视器模式 java监视器模式就是在将共享的数据封装在一个类里面,然后然后所有访问或者修改这些数据的方法都标注为synchronize。 车辆追踪模拟: 使用监视器模式: CarTracker对象维护了一个所有汽车坐标的Map,这个Map是竞争资源,线程会同时对它进行更新和读取。所以才每个方 阅读全文

posted @ 2017-06-20 19:59 张小贱1987 阅读(213) 评论(0) 推荐(0)

Java并发编程实战 第3章 对象的共享
摘要:可见性 可见性是由于java对于多线程处理的内存模型导致的。这似乎是一种失败的设计,但是JVM却能充分的利用多核处理器的强大性能,例如在缺乏同步的情况下,Java内存模型允许编译器对操作顺序进行重排序,并将数值缓存在寄存器中,同时,它还允许CPU对操作顺序进行重排序,并将数值缓存在处理器的特定缓存中 阅读全文

posted @ 2017-06-20 15:56 张小贱1987 阅读(172) 评论(0) 推荐(0)

Java并发编程实战 第2章 线程安全性
摘要:编写线程安全的 代码,核心在与对共享的和可变的对象的状态的访问。 如果多个线程访问一个可变的对象时没有使用同步,那么就会出现错误。在这种情况下,有3中方式可以修复这个问题: 不在线程之间共享该状态变量 将状态变量修改为不可变的变量 在访问状态变量时使用同步 线程安全性的定义: 在多个线程访问某个类时 阅读全文

posted @ 2017-06-20 14:45 张小贱1987 阅读(244) 评论(0) 推荐(0)

导航