Loading

随笔分类 -  并发编程学习

摘要:一.如何处理非正常的线程终止 我们都知道。当单线程的控制台程序由于发生了一个未捕获的异常而终止时,程序将停止运行,并产生与程序正常输出非常不同的栈追踪信息。 但是, 在并发程序中,单个线程的故障很有可能不会影响到整体,而这时的控制台中可能会输出栈追踪信息,但是没人看去看它,就相当于这个异常被忽略!! 阅读全文
posted @ 2020-11-26 09:53 文牧之 阅读(17) 评论(0) 推荐(0)
摘要:一.停止基于线程的服务 1.一般的应用程序中会创建多个线程的服务,例如线程池,我们创建一个线程池的服务时,它会又创建多个线程,如果我们不关闭服务,它会一直存在,所以服务的生命周期通常比创建它们的方法的生命周期更长。如果应用程序准备退出,应用程序会关闭服务,服务又会关闭它拥有的线程。由于无法通过抢占式 阅读全文
posted @ 2020-11-24 15:28 文牧之 阅读(25) 评论(0) 推荐(0)
摘要:一.不可中断的阻塞 1.我们知道在Java库中,许多可阻塞的方法都是通过提前返回或者抛出InterruptedException来响应中断请求的,从而使开发人员更容易构建出能响应取消请求的任务。 2.然而,并非所有的可阻塞方法或者阻塞机制都能响应中断。 如果一个线程由于执行同步的Socket I/O 阅读全文
posted @ 2020-11-23 14:49 文牧之 阅读(50) 评论(0) 推荐(0)
摘要:一. 中断策略学习 我们前面学习了任务包含取消策略,同样的,线程应该包含中断策略。 1.中断策略规定线程如何解释某个中断请求:当发现中断请求时,线程应该做哪些工作(如果需要的话),哪些工作单元对于中断来说是原子操作,以及以多快的速度来响应中断。 2.最合理的中断策略是某种形式的线程级取消操作或者服务 阅读全文
posted @ 2020-11-22 15:37 文牧之 阅读(35) 评论(0) 推荐(0)
摘要:一.任务取消概述 1.我们为什么需要取消任务? 任务和线程的启动很容易,在大多数时候,我们都希望它运行直到结束。然而有时候我们需要提前结束任务或线程,原因可能是用户取消了操作,可能是应用程序需要被快速关闭。 2.如何取消任务? 要使任务和线程能安全,快速,可靠地停下来并不是一件很容易的事情。 Jav 阅读全文
posted @ 2020-11-20 14:46 文牧之 阅读(55) 评论(0) 推荐(0)
摘要:我们在开发中可能会遇到这种情况: 有时候如果某个任务无法在指定时间内完成,那么将不再需要它的结果,此时可以放弃这个任务。 例如:某个Web应用程序从外部的广告服务器上获取广告信息,但如果该应用程序在2s中不能得到响应,那么将显示一个默认的广告,类似的,一个门户网站可以从多个数据源并行的获得数据,但可 阅读全文
posted @ 2020-11-19 12:05 文牧之 阅读(24) 评论(0) 推荐(0)
摘要:一.如何找出可利用的并行性 Executor框架帮助指定执行策略,但如果要使用Executor,必须将任务表述为一个Runnable。 在大多数服务器应用程序中都存在一个明显的任务边界:单个用户请求。 但有时候任务边界并非显而易见。 我们要解决的就是这种情况下如何找出可发掘的并发性。 例如即使在服务 阅读全文
posted @ 2020-11-18 17:44 文牧之 阅读(18) 评论(0) 推荐(0)
摘要:一.我们为什么需要Executor框架? 在上一篇博客中我们可以了解到,任务是一组逻辑工作单元,而线程则是使任务异步执行的机制,而且我们学习了两种通过线程来执行任务的策略:1.把所有任务放在单个线程中串行执行 , 2.将每个任务放到各自的线程中执行 但是上面的两种策略都存在严格的限制: 串行执行的问 阅读全文
posted @ 2020-11-17 13:18 文牧之 阅读(20) 评论(0) 推荐(0)
摘要:一.执行任务 其实大多数的并发应用程序都是围绕着“ 执行任务“来构造的 。 1.什么是任务? 任务通常是一些抽象且离散的工作单元,我们通过把应用程序的工作分解到多个任务中简化程序的组织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提升并发性。 2.在线程中执行任务 阅读全文
posted @ 2020-11-16 15:59 文牧之 阅读(40) 评论(0) 推荐(0)
摘要:一.缓存 缓存是一种非常好的机制,几乎所有服务器应用程序都会使用某种形式的缓存,缓存的目的是以牺牲一些内存的方式重用之前计算结果的方式达到降低延迟,提高吞吐量的效果。 二.开发高效且可伸缩的缓存 1.第一次尝试 1).在下面代码中的Computable<A,V>接口中声明了一个方法Computabl 阅读全文
posted @ 2020-11-15 10:53 文牧之 阅读(25) 评论(0) 推荐(0)
摘要:一.同步工具类概述 1.什么是同步工具类? 同步工具类可以是任何一个对象,只要他可以根据其自身的状态来协调线程的控制流。 例如: 阻塞队列可以作为同步工具类,还有其它的同步工具类:信号量(Semaphore),栅栏(Barrier),闭锁(Latch)。 在java类库中还包括一些其他的同步工具类, 阅读全文
posted @ 2020-11-14 14:07 文牧之 阅读(48) 评论(0) 推荐(0)
摘要:一.阻塞方法 1.线程会阻塞或暂停执行的原因有很多种,比如:等待I/O操作结束,等待获得一个锁,等待从Thread.sleep中醒来,或者等待另一个线程的计算结果。 2.当线程阻塞时,它通常只是被挂起而不是结束,此时的线程会处于阻塞的一种状态,这要视情况而定。 3.阻塞操作与普通操作的差别在于,被阻 阅读全文
posted @ 2020-11-13 20:48 文牧之 阅读(23) 评论(0) 推荐(0)
摘要:上一篇博客主要学习了java中的同步容器,但在一些情况下,同步容器也会出现线程安全性的问题,如需要进行一些复合外部操作时,进行迭代时容易发生ConcurrentModificationException错误。 本篇博客主要学习一个相对于同步容器更好的容器集合:并发容器 一.并发容器 在Java 5. 阅读全文
posted @ 2020-11-02 18:56 文牧之 阅读(29) 评论(0) 推荐(0)
摘要:很多神秘的东西其实早已存在,只要我们善于寻找。 Hacker Dore Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及用于各种协调多个相互协作的线程控制流的同步工具类。 一.同步容器类 Java中的普通容器包uitl中的同步容器类有:Vector,Hashtable,Stac 阅读全文
posted @ 2020-10-29 16:29 文牧之 阅读(14) 评论(0) 推荐(0)
摘要:一.本章概述 本章将介绍一些组合模式,这些模式能够使一个类更容易成为线程安全的类,并且在维护这些类时不会无意的破坏类的安全性保证。 学习目标: 1.设计线程安全的类 2.实例封闭 3.线程安全性的委托 4.在现有的线程安全的类中添加功能 二.具体学习 1.设计线程安全的类 在设计线程安全的类的过程中 阅读全文
posted @ 2020-10-26 20:39 文牧之 阅读(29) 评论(0) 推荐(0)
摘要:一.何为线程不安全类? 一般认为,当多个线程并发的对一个类对象进行操作后发生了线程安全问题,那么这个类就是线程不安全的类。 那么就有人认为:那为什么要编写线程不安全的类呢?把所有类都编写成线程安全的类不就行了,这是不现实的,我们知道,实现线程安全就要付出一定的性能开销,在有些情况下使用线程不安全的类 阅读全文
posted @ 2020-10-19 10:46 文牧之 阅读(45) 评论(0) 推荐(0)
摘要:线程封闭 一.什么是线程封闭? 简单来说,使线程间数据不共享的技术称为线程封闭 二.这样的技术有哪些? 1.栈封闭:局部变量 局部变量的固有属性之一就是封闭在执行的线程中,它们位于执行线程的栈中,其他线程无法访问。 why? 下面来详细了解什么是局部变量: 首先,我们知道局部变量定义在方法中,在执行 阅读全文
posted @ 2020-10-15 19:39 文牧之 阅读(15) 评论(0) 推荐(0)
摘要:一.概念 1.什么是 发布对象? 使一个对象能够被当前范围之外的代码所访问,我们就称发布了这个对象。 下面例子解释何为对象发布: public class Test{ private String[] states={"c","a","r"}; //这个方法对外发布了此类的states对象 publ 阅读全文
posted @ 2020-10-12 09:51 文牧之 阅读(24) 评论(0) 推荐(0)
摘要:文章目录 一.什么是线程安全性? 二.线程安全性具体体现在哪儿?(原子性,可见性,有序性) 1.原子性:提供互斥访问,同一时刻只能有一个线程对它进行操作。 2.可见性:一个线程对主内存的修改可以及时的被其他线程观察到 3.有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,观察结果一般杂乱 阅读全文
posted @ 2020-10-11 10:45 文牧之 阅读(6) 评论(0) 推荐(0)
摘要:本文目录 一.现代计算机的并发问题描述1.什么是并发?2.什么是高并发?3.并发存在的风险 二.Java内存模型(JMM)1.什么是JMM?2.JMM主要分区3.JMM规范1)八种同步操作2)八种操作的同步规则 三.CPU多级缓存1.为什么需要CPU cache?2.带有高速缓存的CPU执行计算的流 阅读全文
posted @ 2020-10-11 09:30 文牧之 阅读(11) 评论(0) 推荐(0)