nihui123
现在在修炼中
展开
-
Java高并发编程详解系列-Guarded Suspension设计模式
导语 什么是Guarded Suspension模式,Suspension 意思是挂起,暂停的。而Guarded则表示担保的意思,连起来的就是确保挂起。也就是说当线程访问某个对象的时候,发现条件不满足,就暂时挂起等待条件满足的时候再次发起访问,这一点与Balking设计模式正好是相反的(Balking在遇到条件不满足的时候回放弃)。...原创 2019-10-28 17:38:31 · 1999 阅读 · 0 评论 -
Java高并发编程详解系列-不可变对象设计模式
导语 在开发中涉及到的所有关于多线程的问题都离不开共享资源的存在。那么什么是共享资源,共享资源就是被多个线程共同访问的数据资源,而且每个线程都会引起它的变化。伴随共享资源而生的新问题就是线程安全,线程安全的主要目的就在于受控制的并发访问中防止数据发生变化。这里的控制手段除了synchronized关键字对资源进行同步读写操作以外,还可以在线程之间不共享资源状态,或者将资源状态设置为不可改变。...原创 2019-07-22 15:51:13 · 2549 阅读 · 0 评论 -
Java高并发编程详解系列-读写锁分离设计思想
导语 在实际多线程情况下访问共享资源,需要对资源进行同步操作防止数据不一致的情况发生,通常使用的方法式是使用synchronized关键字或者是使用Lock显式锁的方式进行同步资源的锁定。 在对同步资源进行访问的时候不免有两种情况读操作和写操作,对于资源的增删改查不外乎就是这两种方式。当多个线程在对同一个资源进行访问的时候就会出现读写操作的竞争问题。也就是说在同一时刻多个线程同时读或者写...原创 2019-07-20 15:13:30 · 2556 阅读 · 4 评论 -
Java高并发编程详解系列-单线程执行设计模式
引言首先介绍的这个技术有一个比较高大尚的英文名字叫做Single Thread Execution也就是说在同一时刻只能有一个线程访问共享资源,也就是说共享资源同一时间只能被一个线程访问,而这个共享资源就采用的排他的方式只要一个线程抢占资源就只有一个线程进行访问。独木桥 什么是独木桥?就是一根木头,这根木头一次只能支持一个人通过。如果有一个人在独木桥上其他人就不能上这个独木桥。我们把这...原创 2019-07-19 19:42:49 · 2091 阅读 · 0 评论 -
Java高并发编程详解系列-线程生命周期观察者
引言 在之前的博客中我们知道,Thread提供了很多可获取的状态,以及判断是否alive的方法,但是这些方法都是线程本身提供的,在Runnable运行的过程中所处的状态是无法直接获取到的到,例如什么时候开始的?什么时候结束的?都需要另外的方法进行获取。有的时候为了监听线程的状态不得不再其中设置共享变量。但是在多线程的情况下设置共享变量导致资源竞争从而增加了其他数据不一致的安全隐患。 在...原创 2019-07-18 20:11:56 · 2420 阅读 · 0 评论 -
Java高并发编程详解系列-7种单例模式
引言在之前的文章中从技术以及源代码的层面上分析了关于Java高并发的解决方式。这篇博客主要介绍关于单例设计模式。关于单例设计模式大家应该不会陌生,作为GoF23中设计模式中最为基础的设计模式,实现起来比较简单但是能真正理解才是重要的一环。这里介绍七种关于单例设计模式的实现方式。饿汉式...原创 2019-07-16 18:32:13 · 2408 阅读 · 0 评论 -
Java高并发编程详解系列-Volatile关键字
在之前的分享中,提到了多线程的类加载机制,说道了线程上下文类加载器,也介绍关于多线程中的内存使用情况,提到了一个关键字volatile,介绍了CPU的缓存机制,介绍了Java内存模型。下面就来介绍一下并发编程中的最为中要的三个特点。并发编程三大特性原子性 所谓的原子性在之前的博客中或者是在网上其他资料上都有所提及到。是指在一次的操作或者多次的操作过程中,要么所有的需要的操作全部都执行...原创 2019-05-30 18:12:43 · 2909 阅读 · 0 评论 -
Java高并发编程详解系列-内存模型
volatile关键字介绍,要了解volatile需要了解的还有Java内存模型,以及CPU内存模型等知识。首先从CPU和Java内存模型开始说起。CPU Cache模型 在之前的时候,分享过一个博客一篇博客,就是关于介绍CPU与内存速度不匹配的问题,为了解决这个问题,在CPU和内存之间设计了高速缓存,这个高速缓存出现就是解决CPU和RAM主存之间的速度不匹配。现在CPU的缓存已经增加到...原创 2019-05-22 16:22:19 · 1723 阅读 · 0 评论 -
Java高并发编程详解系列-线程上下文类加载
前面的分享中提到的最多的概念就是关于类加载器的概念,但是当我们查看Thread源码的时候会发现如下的两个方法,这两个方法就是获取或者设置线程的上下文类加载器的方法,那么为什么要设置这两个方法呢?这个就是这次分享所要说的事情。线程上下文类加载器使用在Thread类中有两个方法,如下获取到当前线程的上下文类加载器 public ClassLoader getContextClassLo...原创 2019-05-18 17:26:04 · 2449 阅读 · 0 评论 -
Java高并发编程详解系列-JVM类加载器
之前的博客中提到了类加载的过程,提到了双亲委托机制,提到了关于类加载器的概念,这篇博客就来给大家分享一下什么是JVM的类加载器。通过实战的方式来了解一下类加载器器到底是什么。JVM类加载器分类 类加载器就是在类加载的过程中负责对于class文件进行加载的对象。也就是说通过这类加载器来确定每个类与JVM的唯一性关系。对于任何一个对象在JVM都是唯一存在的。 在JVM中类加载器主要分为三...原创 2019-05-12 18:29:01 · 1844 阅读 · 0 评论 -
Java高并发编程详解系列-类加载
之前在写关于JVM的时候提到过类加载机制,类加载机制也是在Java面试中被经常问道的一个问题,在这篇博客中就来了解一下关于类加载的知识。类加载 在JVM执行Java程序的时候实际上执行的编译好的class 文件,我们知道Java语言的夸平台特性其实实际上是由不同平台的虚拟机来完成的,那么整个JVM又是怎样执行这些操作的呢?就不得不提一个类加载问题,在不同平台的机器上可以运行同样的Clas...原创 2019-05-11 23:14:20 · 2442 阅读 · 0 评论 -
Java高并发编程详解系列-线程池原理自定义线程池
之前博客的所有内容是对单个线程的操作,例如有Thread和Runnable的使用以及ThreadGroup等的使用,但是对于在有些场景下我们需要管理很多的线程,而对于这些线程的管理有一个统一的管理工具叫做线程池,线程池就是管理很多的线程的一个集合。这篇分享中提出的一个就是关于线程池的概念。线程池原理 从JDK1.5开始,utils包提供了一个类ExecutorService,这个类是对线...原创 2019-05-10 21:03:35 · 1989 阅读 · 0 评论 -
Java高并发编程详解系列-线程异常处理
前面的博客中主要描述的关于线程的概念,通过源码分析了解线程的基本操作方式,但是如何在线程运行期间获取异常信息呢?这就要使用到一个Hook线程了线程运行时的异常 在Thread类中,关于线程运行时异常的API一共有四个如下图所示UncaughtExceptionHandler 在线程执行的过程中是没有办法检查抛出异常的,这个是因为执行的方法没有返回值而且线程又运行在属于自己的上下文...原创 2019-05-06 23:29:20 · 2651 阅读 · 0 评论 -
Java高并发编程详解系列-ThreadGroup介绍
在之前的分享中提到过关于Thread的部分源码分析,其中提到的一个比较关键的概念就是关于ThreadGroup的概念,也就是说每个一个线程创建之后都会属于一个线程组。每个线程组也可以有自己的父线程组,也可以有自己的子线程组。就想每个线程既有自己的子线程也有自己的父线程。这次分享就是主要来探讨一下关于线程组TreadGroupThreadGroup 在之前的时候我们分析过,对于任意一个创建...原创 2019-05-06 10:34:23 · 2479 阅读 · 0 评论 -
Java高并发编程详解系列-线程通信
进程间的通信,又被称为是进程内部的通信,我们都知道每个进程中有多个线程在执行,多个线程要互斥的访问共享资源的时候会发送对应的等待信号或者是唤醒线程执行等信号。那么这些信号背后还有什么样的技术支持呢?两种消息处理方式同步阻塞式消息处理 假设有这样的一个功能需要完成,每个客户端需要提交一个Event到服务器,而服务器接收到客户端请求之后开辟处理线程进行客户端请求处理操作,经过处理之后将...原创 2019-05-03 23:14:39 · 2090 阅读 · 0 评论 -
Java高并发编程详解系列-线程安全数据同步
在多线程中最为复杂和最为重要的就是线程安全。多个线程访问同一个对象的时候会导致线程安全问题。通过加锁可以避免这种问题。但是在串行执行的过程中又不用考虑线程安全问题,而使用串行程序效率低没有办法将CPU的利用率提升到最大。所以还要使用多线程并行执行,既然提到了多线程就必须面对线程安全问题。共享资源 在之前的博客中曾经提到过一个问题,就是JVM的内存模型,在内存模型中我们知道除了堆内存和方法...原创 2019-05-02 22:45:00 · 2406 阅读 · 0 评论 -
Java高并发编程详解系列-Java线程入门
根据自己学的知识加上从各个网站上收集的资料分享一下关于java高并发编程的知识点。对于代码示例会以Maven工程的形式分享到个人的GitHub上面。 首先介绍一下这个系列的东西是什么,这个系列自己总结的东西比较多,主要参考的内容是《Java高并发编程详解》这本书,当然也结合了很多的其他书籍,以及网站。现在多元化的学习途径,导致的问题就是没有一个系列的教程来讲解关于某一个点的详细的内容。通过...原创 2019-04-27 22:43:01 · 2551 阅读 · 1 评论 -
Java高并发编程详解系列-深入理解Thread构造
上篇分享中主要是对线程的基本概念和基本操作做了一个分享,同时提出了两种常用的创建多线程的方法,当然在后期的分享中也会提及到更多的创建线程的方式,到后期的分享的时候再说。这次主要是深入的理解一下Thread的构造函数,通过构造函数对于Thread有一个更加深入的了解。这里首先提供一个JDK1.6的ThreadAPI截图线程命名规范 从源码分析可以看到在Thread类中默认提供了线程的...原创 2019-04-28 23:23:50 · 3975 阅读 · 1 评论 -
Java高并发编程详解系列-ThreadAPI简单说明
之前的两篇分享中,简单的从概念上和简单的操作上了解了Thread,这篇分享中主要是看看对于Thread的所有API的使用方式,通过解析源码的方式来了解关于Thread的细节的使用方式引言 首先在了解Thread之前,先了解一个Object类,这个类作为所有类的父类,是对所有对象的抽象。Object 从代码结构中可以清楚的看到Object为我们提供了12个方法和一个静态方法块这里...原创 2019-05-01 22:22:53 · 2471 阅读 · 1 评论 -
Java高并发编程详解系列-Future设计模式
导语 假设,在一个使用场景中有一个任务需要执行比较长的时间,通常需要等待任务执行结束之后或者是中途出错之后才能返回结果。在这个期间调用者只能等待,对于这个结果Future设计模式提供了一种凭据式的解决方案。在日常生活中,这种方案也是存在的。例如去洗衣店洗衣服,当你把衣服放到洗衣店,等他洗完需要一段时间,这个时候洗衣店就会给你一凭证,你可以通过这个凭证到时候去取洗好的衣服。这个例子就是生活中的...原创 2019-09-20 19:36:05 · 2568 阅读 · 0 评论