摘要: 死锁 每个人手里都有其他人需要的资源,自己又不会放下手上的资源,这么一直等待下去,就会发生死锁. 当一个线程永远占有一个锁,而其他线程尝试去获得这个锁,那么它们将永远被阻塞. 当线程A占有锁L时,想要获得锁M,同时线程B持有M,并尝试得到L,两个线程将永远等待下去,这种情况是死锁最简单的形式(或称致 阅读全文
posted @ 2018-10-24 14:41 lbr617 阅读(627) 评论(0) 推荐(0) 编辑
摘要: 等待其他资源,可能会产生线程饥饿死锁 在线程池中如果一个任务依赖于其它任务的执行,就可能产生死锁.在一个单线程化的Executor中,提交两个任务,任务二滞留在工作队列中等待第一个任务完成,但是第一个任务不会完成,因为它在等待第二个任务的完成(需要第二个任务执行的结果进行运算), 这就会发生死锁 . 阅读全文
posted @ 2018-10-22 08:58 lbr617 阅读(1351) 评论(0) 推荐(3) 编辑
摘要: 小节 为什么 需要取消和关闭 : 有时候我们希望在任务或线程自然结束之前就停止它们,可能因为用户取消了操作,或者应用程序需要快速关闭. 取消和关闭的好处: 不会浪费资源执行一些没用的操作、保证程序的正常退出. Java没有提供任何机制,来安全地强迫线程停止手头的工作.它提供中断(线程的interru 阅读全文
posted @ 2018-10-18 09:39 lbr617 阅读(872) 评论(0) 推荐(1) 编辑
摘要: 单线程的缺点&使用多线程的好处 围绕执行任务来管理应用程序时,第一步要指明一个清晰的任务边界(task boundaries).理想情况下,任务是独立的活动:它的工作并不依赖于其他任务的状态、结果或者边界效应.独立有利于并发性,如果能得到相应的处理器资源,独立的任务还可以并行执行. 在正常的负载下, 阅读全文
posted @ 2018-10-16 08:38 lbr617 阅读(711) 评论(0) 推荐(0) 编辑
摘要: 前文回顾 上一篇博客 从零开始学多线程之组合对象(三) 主要讲解了: 1. 设计线程安全的类要考虑的因素. 2. 对于非线程安全的对象,我们可以考虑使用锁+实例限制(Java监视器模式)的方式,安全的访问它们. 3. 扩展线程安全类的四种方式. 本篇博客将要讲解的知识点 使用java提供的线程安全容 阅读全文
posted @ 2018-10-14 10:41 lbr617 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 换了个markdown的编辑器,感觉挺方便的,但是手机端的格式显示不正确,如果读者是手机端用户,点击右上角作者主页查看,就可以了 前文回顾 通过博主之前发布的两篇博客 "从零开始学多线程之线程安全(一)" 和 "从零开始学多线程之共享对象(二)" 讲解的知识点,我们现在已经可以构建线程安全的类了,本 阅读全文
posted @ 2018-10-12 09:35 lbr617 阅读(591) 评论(0) 推荐(0) 编辑
摘要: 想要使用多线程编程,有一个很重要的前提,那就是必须保证操纵的是线程安全的类. 那么如何构建线程安全的类呢? 1. 使用同步来避免多个线程在同一时间访问同一数据. 2. 正确的共享和安全的发布对象,使多个线程能够安全的访问它们. 那么如何正确的共享和安全的发布对象呢? 这正是这篇博客要告诉你的. 1. 阅读全文
posted @ 2018-10-11 15:50 lbr617 阅读(565) 评论(0) 推荐(1) 编辑
摘要: 最近在复习、整理之前学习的多线程的知识,本着燃烧自己,照亮他人的想法,把自己整理的一些关于多线程的学习笔记、心得分享给大家. 博主准备把自己关于多线程的学习笔记写成三个部分分享给大家: 基础、实战、测试&优化 这三个部分是一环扣一环的. 1.基础: 多线程操作的对象必须是线程安全的,所以构建线程安全 阅读全文
posted @ 2018-10-10 08:50 lbr617 阅读(1100) 评论(1) 推荐(3) 编辑
摘要: 线程安全 通过这篇博客你能学到什么: 编写线程安全的代码,本质上就管理状态的访问,而且通常是共享的、可变的状态. 状态:可以理解为对象的成员变量. 共享: 是指一个变量可以被多个线程访问 可变: 是指变量的值在生命周期内可以改变. 保证线程安全就是要在不可控制的并发访问中保护数据. 如果对象在多线程 阅读全文
posted @ 2018-10-07 20:26 lbr617 阅读(780) 评论(1) 推荐(4) 编辑
摘要: 本文将简单的介绍一下Lambda表达式和方法引用,这也是Java8的重要更新,Lambda表达式和方法引用最主要的功能是为流(专门负责迭代数据的集合)服务. 什么是lambda表达式 可以把lambda表达式理解为简洁的匿名函数. 我们先声明一个函数式接口(函数式接口:就是只有一个抽象方法的接口.  阅读全文
posted @ 2018-09-26 15:01 lbr617 阅读(20636) 评论(1) 推荐(61) 编辑