
java多线程设计模式
匍匐-菜鸟
好好做一件事,好好做下去
展开
-
Java多线程设计模式之Immutable模式
举一个例子,对于Java使用者,Java.lang.String类和StringBuilder类大家应该都熟悉,但是,我们也了解到String类中并没有修改字符串的内容的方法,也就是说String的实例所表示的字符串的内容不会发生变化,因此,其也不能被声明为synchronized,所以无论多少个线程进行访问,都是安全的。这有点Immutable模式的意思,没错,其实是Immutable的一种,如原创 2017-10-18 21:26:08 · 398 阅读 · 0 评论 -
锁机制初探(四)Java对象头
上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型。这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头。主要介绍一下对象头的作用,结构以及他和锁的关系。Java对象模型回顾与勘误在上一篇文章中,关于对象头的部分描述有误,我已经在我博客的文章中就行修正 。这里再重新表述一下。每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlas...转载 2019-06-12 19:07:45 · 423 阅读 · 0 评论 -
锁机制初探(三)Java对象模型初探
上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令实现,同步方法使用ACC_SYNCHRONIZED标记符实现。后面几篇文章会从JVM源码的角度更加深入,层层剥开synchronized的面纱。在进入正题之前,肯定有些基础知识需要铺垫,那么先来看一下一个容易被忽略的但是又很重要的知识点 —— Java对...转载 2019-06-12 17:00:17 · 244 阅读 · 0 评论 -
锁机制初探(二)Synchronized的实现原理(一)
synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对象加锁。那么,本文来介绍一下synchronized关键字的实现原理是什么。在阅读本文之间,建议先看下Java虚拟机是如何执行线程同步的。反编译众所周知,在Java中,synchr...转载 2019-06-12 15:04:17 · 219 阅读 · 0 评论 -
锁机制初探(一)Java虚拟机同步机制简介
转载地址:https://blog.youkuaiyun.com/w372426096/article/details/80938901想介绍下synchronized的原理,但是又不知道从何下手,在网上看到一篇老外的文章,介绍了和线程同步相关的几个基础知识点。所以想把它翻译一下给大家看看。相信看过这些基础知识之后再看我后面要写的synchronized的原理就会好理解一点了。原文地址:How the...转载 2019-06-12 14:53:28 · 214 阅读 · 0 评论 -
java多线程设计模式之Read-Write Lock模式
当线程“读取”实例的状态时,实例的状态不会发生变换,实例的状态尽在执行线程的时候“写入”操作时才会发生变化,是实例的状态来看,起有着本质的区别。在将要说的设计模式中,读取和写入是相互分开的,在进行相应的操作之前必须获取其对应的锁。所以多个线程可以同时读取,但是当在写入的时候不允许读取操作,一般来说,执行互斥处理会降低程序的性能,但是如果吧针对写入的互斥处理和针对读取的互斥处理分开来考虑,则可以提高原创 2017-11-04 22:38:03 · 352 阅读 · 0 评论 -
java多线程设计模式之-SingleThreadExecution模式
之前学习的程序大多是单个线程运行,不会涉及到多个线程之间的通信以及多个线程之间的相互影响,按照之间的面向对象的设计方法,我们可以模拟一个场景,当我们进出门口的程序,进出门口时需要记录这个人的姓名和出生地(模拟用例): 设计一个“门”类,用于记录进出口的人员,代码编写如下:public class Gate { private int counter = 0; private Str原创 2017-10-17 12:25:38 · 792 阅读 · 0 评论 -
java多线程设计模式之Producer-Consumer模式(二)
延伸理解:InterruptedExceptionInterruptedException表明该方法中可能会抛出这个异常,其包含两种含义,这是一个花费时间的方法,同时这个也是可以取消的方法。用一句话来概括就是:这个方法可能会花费时间,但是同时也是可以取消的。参考java的标准类库,可以发现典型的方法有以下几个:1.java.lang.Object类的wait()方法2.java.l原创 2017-11-04 20:43:35 · 343 阅读 · 0 评论 -
java多线程设计模式之Producer-Consumer模式(一)
Producer是生产者的意思,指的是生成数据的线程,Consumer则是消费者的意思,指的是使用数据的线程,这里我们要实现的是如何安全的将数据从生产者交给消费者,看似简单但是当两者处于不同的线程时,处理速度差异便会产生问题。对于这个问题,我们可以在两者之间加入一个桥梁通道的角色,具体的设计如下:情景创建,假如说有个蛋糕店,糕点师制作蛋糕,顾客吃蛋糕,糕点师制作完成后将蛋糕放在桌子上,原创 2017-11-04 13:43:51 · 880 阅读 · 0 评论 -
java多线程设计模式之GuardSuspension模式
Guard是原创 2017-11-04 10:56:11 · 542 阅读 · 0 评论 -
java多线程设计模式之Thread-Per-Message模式
日常生活中,我们也会经常的委托别人帮我们什么忙,好比,你能帮我传一下这个文件吗。这样,把这个工作传递给其他人之后,自己就可以做其他的工作了,这也就是这次要讨论的Thread-Per-Message模式。 要展示的示例程序的类图如下:代码设计如下:host类设计如下,主要的功能就是通过开启线的线程,调用helper的handle方法,并将字符的数量和字符输入进去。原创 2017-11-13 20:58:13 · 581 阅读 · 0 评论 -
锁机制初探(五)Moniter的实现原理
在深入理解多线程(一)——Synchronized的实现原理中介绍过关于Synchronize的实现原理,无论是同步方法还是同步代码块,无论是ACC_SYNCHRONIZED还是monitorenter、monitorexit都是基于Monitor实现的,那么这篇来介绍下什么是Monitor。操作系统中的管程如果你在大学学习过操作系统,你可能还记得管程(monitors)在操作系统中是很重...转载 2019-06-12 20:02:17 · 744 阅读 · 0 评论