lbr617
Published on undefined in 暂未分类 with lbr617

随笔分类 -  JAVA并发编程实践学习笔记

摘要:概述 Java存储模型(JMM), 安全发布、规约,同步策略等等的安全性得益于JMM ,在你理解了为什么这些机制会如此工作后,可以更容易有效地使用它们. 1. 什么是存储模型,要它何用. 如果缺少同步,就会有很多因素会导致线程 无法立即,甚至永远无法 看到另一个线程的操作所产生的结果: 编译器生成指 阅读全文
posted @ 2018-11-27 10:36 lbr617 阅读(478) 评论(0) 推荐(0) 编辑
摘要:概述 java.util.concurrent包中的许多类,比如Semaphore和ConcurrentLinkedQueue,都提供了比使用Synchronized更好的性能和可伸缩性.这是因为它们的内部实现使用了 原子变量和非阻塞的同步机制. 近年来很多关于并发算法的研究都聚焦在 非阻塞算法 ( 阅读全文
posted @ 2018-11-22 09:12 lbr617 阅读(562) 评论(0) 推荐(0) 编辑
摘要:概述: 在 "并发编程学习笔记之并发工具类(四)" 中,为大家介绍了几种同步工具(同步工具就是 依靠自己的状态,调节线程是阻塞还是运行 用的.),闭锁、FutureTask、信号量、关卡. 使用以上的同步工具大部分时候可以满足我们的需求,但是如果没能满足我们需要的功能, 可以使用语言和类库提供的底层 阅读全文
posted @ 2018-11-13 10:08 lbr617 阅读(383) 评论(0) 推荐(1) 编辑
摘要:ReentrantLock(重进入锁)并不是作为内部锁(synchronized)机制的替代,而是当内部锁被证明受到局限时,提供可选择的高级特性. 1. Lock 和 ReentrantLock Lock接口: 与内部加锁机制不同,Lock提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有加 阅读全文
posted @ 2018-11-02 08:05 lbr617 阅读(512) 评论(0) 推荐(1) 编辑
摘要:很多改进性能的技术增加了复杂度,因此增加了安全和活跃度失败的可能性. 更糟糕的是,有些技术的目的是改善性能,事实上产生了相反的作用,带来了其他的性能问题. 数据的正确性永远是第一位的,保证程序是正确的,然后再让它更快 .只有当你的性能需求和评估标准需要程序运行得更快时,才去进行改进. 在设计并发应用 阅读全文
posted @ 2018-10-29 10:26 lbr617 阅读(732) 评论(3) 推荐(1) 编辑
摘要:死锁 每个人手里都有其他人需要的资源,自己又不会放下手上的资源,这么一直等待下去,就会发生死锁. 当一个线程永远占有一个锁,而其他线程尝试去获得这个锁,那么它们将永远被阻塞. 当线程A占有锁L时,想要获得锁M,同时线程B持有M,并尝试得到L,两个线程将永远等待下去,这种情况是死锁最简单的形式(或称致 阅读全文
posted @ 2018-10-24 14:41 lbr617 阅读(640) 评论(0) 推荐(0) 编辑
摘要:等待其他资源,可能会产生线程饥饿死锁 在线程池中如果一个任务依赖于其它任务的执行,就可能产生死锁.在一个单线程化的Executor中,提交两个任务,任务二滞留在工作队列中等待第一个任务完成,但是第一个任务不会完成,因为它在等待第二个任务的完成(需要第二个任务执行的结果进行运算), 这就会发生死锁 . 阅读全文
posted @ 2018-10-22 08:58 lbr617 阅读(1361) 评论(0) 推荐(3) 编辑
摘要:小节 为什么 需要取消和关闭 : 有时候我们希望在任务或线程自然结束之前就停止它们,可能因为用户取消了操作,或者应用程序需要快速关闭. 取消和关闭的好处: 不会浪费资源执行一些没用的操作、保证程序的正常退出. Java没有提供任何机制,来安全地强迫线程停止手头的工作.它提供中断(线程的interru 阅读全文
posted @ 2018-10-18 09:39 lbr617 阅读(890) 评论(0) 推荐(1) 编辑
摘要:单线程的缺点&使用多线程的好处 围绕执行任务来管理应用程序时,第一步要指明一个清晰的任务边界(task boundaries).理想情况下,任务是独立的活动:它的工作并不依赖于其他任务的状态、结果或者边界效应.独立有利于并发性,如果能得到相应的处理器资源,独立的任务还可以并行执行. 在正常的负载下, 阅读全文
posted @ 2018-10-16 08:38 lbr617 阅读(721) 评论(0) 推荐(0) 编辑
摘要:前文回顾 上一篇博客 从零开始学多线程之组合对象(三) 主要讲解了: 1. 设计线程安全的类要考虑的因素. 2. 对于非线程安全的对象,我们可以考虑使用锁+实例限制(Java监视器模式)的方式,安全的访问它们. 3. 扩展线程安全类的四种方式. 本篇博客将要讲解的知识点 使用java提供的线程安全容 阅读全文
posted @ 2018-10-14 10:41 lbr617 阅读(615) 评论(0) 推荐(0) 编辑
摘要:换了个markdown的编辑器,感觉挺方便的,但是手机端的格式显示不正确,如果读者是手机端用户,点击右上角作者主页查看,就可以了 前文回顾 通过博主之前发布的两篇博客 "从零开始学多线程之线程安全(一)" 和 "从零开始学多线程之共享对象(二)" 讲解的知识点,我们现在已经可以构建线程安全的类了,本 阅读全文
posted @ 2018-10-12 09:35 lbr617 阅读(600) 评论(0) 推荐(0) 编辑
摘要:想要使用多线程编程,有一个很重要的前提,那就是必须保证操纵的是线程安全的类. 那么如何构建线程安全的类呢? 1. 使用同步来避免多个线程在同一时间访问同一数据. 2. 正确的共享和安全的发布对象,使多个线程能够安全的访问它们. 那么如何正确的共享和安全的发布对象呢? 这正是这篇博客要告诉你的. 1. 阅读全文
posted @ 2018-10-11 15:50 lbr617 阅读(576) 评论(0) 推荐(1) 编辑
摘要:最近在复习、整理之前学习的多线程的知识,本着燃烧自己,照亮他人的想法,把自己整理的一些关于多线程的学习笔记、心得分享给大家. 博主准备把自己关于多线程的学习笔记写成三个部分分享给大家: 基础、实战、测试&优化 这三个部分是一环扣一环的. 1.基础: 多线程操作的对象必须是线程安全的,所以构建线程安全 阅读全文
posted @ 2018-10-10 08:50 lbr617 阅读(1103) 评论(1) 推荐(3) 编辑
摘要:线程安全 通过这篇博客你能学到什么: 编写线程安全的代码,本质上就管理状态的访问,而且通常是共享的、可变的状态. 状态:可以理解为对象的成员变量. 共享: 是指一个变量可以被多个线程访问 可变: 是指变量的值在生命周期内可以改变. 保证线程安全就是要在不可控制的并发访问中保护数据. 如果对象在多线程 阅读全文
posted @ 2018-10-07 20:26 lbr617 阅读(795) 评论(1) 推荐(4) 编辑

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