java的平凡之路

博客的文章都是平时学习或者遇到其他人写的不错的文章分享,也是做一个记录,希望大家喜欢...

轻松学习java可重入锁(ReentrantLock)的实现原理

前言相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实现的。如果真是这样,而且你有兴趣了解,今天我将带领你轻松的学习下java中非常重要,也非常基础的可...

2018-05-31 11:35:55

阅读数:39

评论数:0

Java并发包基石-AQS详解

目录    1 基本实现原理      1.1 如何使用       1.2 设计思想    2 自定义同步器      2.1 同步器代码实现       2.2 同步器代码测试    3 源码分析      3.1 Node结点       3.2 独占式       3.3 共享式    4...

2018-05-30 18:21:03

阅读数:73

评论数:0

【多线程高并发】多线程的设计模式

关键字::多线程设计模式,Future模式,Master-Worker模式,生产者-消费者模型 github 地址: https://github.com/zhaikaishun/concurrent_programming 本篇文章代码在Multi_004 中多线程的设计模式代码在Multi_0...

2018-05-30 10:43:33

阅读数:67

评论数:0

java 多线程并发系列之 生产者消费者模式的两种实现

生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。真实世界中的生产者消费者模式生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系。比如一个人正在准备食物(生产者),而另一个人正在吃(...

2018-05-30 09:27:43

阅读数:57

评论数:0

理解线程池的原理

读完本文你将了解:什么是线程池线程池的处理流程保存待执行任务的阻塞队列创建自己的线程池JDK 提供的线程池及使用场景newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool两种提交任务的方法...

2018-05-29 10:49:48

阅读数:47

评论数:0

JVM 并发性: 使用 Akka 执行异步操作

本 系列 中以前的文章介绍了如何通过以下方式实现并发性:并行地在多个数据集上执行相同的操作(就像 Java 8 流一样)显式地将计算构建成异步执行某些操作,然后将结果组合在一起(就像 future 一样)。这两种方法都是实现并发性的不错方式,但是您必须将它们明确地设计到应用程序中。在本文和接下来的...

2018-05-28 18:24:24

阅读数:526

评论数:0

Coroutine in Java - Quasar Fiber实现

简介说到协程(Coroutine),很多人会想到go,lua,erlang等语言,其实JVM上也有蛮多的实现,如PicoThread,Kilim,Quasar等,本文主要介绍其中一种Coroutine实现 -- Quasar Fiber,Quasar Fiber相对来说流行度更好一些,如果之前没有...

2018-05-25 15:45:20

阅读数:198

评论数:0

继续了解Java的纤程库 – Quasar

前一篇文章Java中的纤程库 – Quasar中我做了简单的介绍,现在进一步介绍这个纤程库。Quasar还没有得到广泛的应用,搜寻整个github也就pinterest/quasar-thrift这么一个像样的使用Quasar的库,并且官方的文档也很简陋,很多地方并没有详细的介绍,和Maven的集...

2018-05-25 15:43:35

阅读数:405

评论数:0

Java中的纤程库 – Quasar

最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题:服务 A 是我们开发的系统,它的业务需要调用 B、C、D 等多个服务,这些服务是通过http的访问提供的。 问题是 B、C、D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency...

2018-05-25 15:40:18

阅读数:58

评论数:0

理解JMX之介绍和简单使用

近期在项目上需要添加一些功能,想把一个开源工程整合进来,虽说是整合,但是觉得跟开发有查不了多少,要让这个开源工程的编码风格和设计方式与我们的工程保持一致,其中涉及到应用程序的监控和管理,不可避免的要使用JMX,之前简单的了解过JMX,但是没有动力深入去了解其中的原理和编码,由于项目需要,这次针对J...

2018-05-25 15:32:38

阅读数:34

评论数:0

Java JDK代理、CGLIB、AspectJ代理分析比较

前言什么是代理,在Design patterns In java这个本书中是这样描述的,简单的说就是为某个对象提供一个代理,以控制对这个对象的访问。在不修改源代码的基础上做方法增强,代理是一种设计模式,又简单的分为两种。静态代理:代理类和委托类在代码运行前关系就确定了,也就是说在代理类的代码一开始...

2018-05-25 15:14:43

阅读数:36

评论数:0

gRPC线程模型分析

1. RPC线程模型1.1. BIO线程模型在JDK 1.4推出Java NIO之前,基于Java的所有Socket通信都采用了同步阻塞模式(BIO),这种一请求一应答的通信模型简化了上层的应用开发,但是在性能和可靠性方面却存在着巨大的瓶颈。因此,在很长一段时间里,大型的应用服务器都采用C或者C+...

2018-05-25 14:37:41

阅读数:527

评论数:0

浅谈我对协程的理解

一句话说明什么是线程:协程是一种用户态的轻量级线程。一句话并不能完全概括协程的全部,但是起码能让我们对协程这个概念有一个基本的印象。从硬件发展来看,从最初的单核单CPU,到单核多CPU,多核多CPU,似乎已经到了极限了,但是单核CPU性能却还在不断提升。server端也在不断的发展变化。如果将程序...

2018-05-25 11:43:48

阅读数:249

评论数:0

进程和线程、协程的区别

现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。一、概念  1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进...

2018-05-25 11:28:45

阅读数:206

评论数:0

内核态和用户态的区别

当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即...

2018-05-25 11:06:02

阅读数:84

评论数:0

jstat命令查看jvm的GC情况

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意!!!:使用的jdk版本是jdk8.   类加载统计: Loaded:加载class的数量Bytes:所占用空间大小Unloaded:未加...

2018-05-24 11:49:57

阅读数:238

评论数:0

java命令--jstat 工具使用

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。一、介绍用以判断JVM是否存在...

2018-05-24 11:49:19

阅读数:81

评论数:0

Java常用分析工具之jmap

简介jmap是JDK中提供的一个用来监视进程运行中的jvm物理内存的占用情况的工具。该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量。当系统崩溃时,jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等。使用jmap会影响线上运行的应用...

2018-05-24 11:39:17

阅读数:55

评论数:0

使用jvisualvm通过JMX的方式远程监控JVM的运行情况

使用jvisualvm通过JMX的方式远程监控JVM的运行情况,步骤如下远程服务器的配置在启动java程序时加上如下几个参数-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.managem...

2018-05-24 11:00:52

阅读数:109

评论数:0

java-线程同步

线程世界出现了一把锁幸好还是又聪明人的,有人想到了一个解决问题的好方法。虽然不知道谁想到的注意,但是这个注意确实解决了一部分问题,解决的方案是加锁。你想要进行对一组加锁的代码进行操作吗?想的话就先去抢到锁,拿到锁之后就可以对被加锁的代码为所欲为了,倘若拿不到锁的话就只能在代码块门口等着,因为等的线...

2018-05-24 09:23:53

阅读数:48

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭