java中的锁

     锁从宏观上分类,分为悲观锁与乐观锁。        乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,...

2018-06-26 16:18:37

阅读数 50

评论数 0

Concurrenthashmap的实现原理分析

1.    HashMap概述 HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同)。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 ...

2018-06-04 15:37:22

阅读数 98

评论数 0

线上常见问题排查之CPU过高

目前应用程序基本是Java,所以需要登录docker容器内部执行jstack命令打印堆栈信息再分析。确认目标进程执行top命令查看CPU占用情况,找出CPU占用高的进程ID。PS:输入大写P即可按照CPU占比排序进程(即 Shift + p)# top 找出对应进程信息# ps -ef|grep...

2018-05-31 18:00:17

阅读数 362

评论数 0

Quartz集群原理分析

一、Quartz概念Quartz是一个优秀的任务调度框架, 具有以下特点:强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;负载均衡高可用调度器:scheduler任务调度的控制器,负责定时任务的调度,并且提供任务和触发器的增删改查等api方法。任务:jobjob是实际被调度...

2018-05-30 10:50:16

阅读数 2237

评论数 4

AQS实现原理

       AQS(AbstractQueuedSynchronizer)即 队列同步器,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。       同步器的主要使用方式是继承。子类推荐被定义为自定义同步组件的...

2018-05-20 13:22:26

阅读数 1328

评论数 1

Redis集群

    在介绍Redis的集群方案之前,我们先来谈一下数据分区的几种策略。     主要的数据分区有顺序分区和哈希分区,我们这里主要讲的是哈希分区,常见的哈希分区规则有几种,下面分别介绍:        A:节点取余分区     使用特定的数据,如Redis的键或用户ID,再根据节点数量N使用公式...

2018-05-18 15:49:59

阅读数 123

评论数 0

JAVA分布式锁的实现

        为什么要使用分布式锁?为了保证一个方法在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。但是,随着业务发展的需要,原单体单机部署的系统被演化成分布...

2018-05-16 10:35:52

阅读数 425

评论数 0

序列化和反序列化的底层实现原理

序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等...

2018-04-27 16:45:09

阅读数 288

评论数 1

Redis理解之缓存设计

       缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要。下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析、缓存更新策略的选择和使用场景、缓存粒度控制方法、穿透问题优化、无底洞问题优化、雪崩问题优化、热点key重建优化。       1)...

2018-04-24 15:23:39

阅读数 927

评论数 0

Redis理解之单线程架构

       Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务,下面来分析Redis单线程模型为什么性能如此之高。       通常来讲,单线程处理能力要比多线程差,例如有10000斤货物,每辆车的运载能力是每次200斤,那么要50次才能完成,但是如果有50辆车,只要安排...

2018-04-24 13:39:08

阅读数 846

评论数 0

Redis理解之对象类型

       上篇博客提到过redis里面涉及到 字符串对象、列表对象、哈希对象、集合对象和有序对象 这五种对象类型。下面将分别对这五个对象做进一步了解。       redis对象都是由一个redisObject结构来表示的,该结构如下:      类型type包括以下五种: 编码encodin...

2018-04-03 17:50:26

阅读数 67

评论数 0

Redis理解之数据结构

       我们知道redis里面的每个键值对都是有对象组成的。其中,键总是字符串对象,而值可以是字符串对象、列表对象、哈希对象、集合对象和有序对象 这五个对象的任意一种。下面将会分别介绍以上涉及到的五种对象的底层数据结构。     1)简单动态字符串(SDS)      区别于C语言的字符串,...

2018-04-02 16:00:16

阅读数 47

评论数 0

JAVA并发理解之volatile、synchronized和lock解析

       谈到并发时候,离不开JAVA的几个关键字volatile、synchronized和lock类。下面就分别介绍一下它们的实现原理、用法以及使用场景。      首先先了解一下Java内存模型的抽象示意如图所示      *每个线程都有自己的本地内存空间(java栈中的帧)。线程执行时...

2018-03-27 16:41:55

阅读数 83

评论数 0

JAVA并发理解之重排序问题

       首先我们先来了解一下什么是重排序:重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序,如下图所示      上述的1属于编译器重排序,2和3属于处理器重排序。这些重排序可能会导致多线程程序出现...

2018-03-26 20:30:49

阅读数 1467

评论数 0

JAVA并发理解之原子操作

      本章主要介绍一下原子 操作的概念以及JAVA是如何保证原子性的。原子:本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。接下来让我们看一下处理器和Java里是如何实现原子操作的。  1)处理器如何实现原子操作   ...

2018-03-26 16:33:15

阅读数 118

评论数 0

JVM理解之垃圾回收(二)

      这篇文章主要接着上篇博客针对jvm是如何进行垃圾回收的进行介绍。下面将分别介绍主要的回收算法和所用到的垃圾收集器,帮忙大家对jvm垃圾回收机制有更全面的认识。     1)垃圾收集算法     垃圾收集算法,主要包括四种分别是:”标记-清除”(Mark-Sweep)、“复制”(Copy...

2018-03-23 16:02:35

阅读数 59

评论数 0

JVM理解之垃圾回收(一)

说起Java的垃圾回收机制,无非弄懂三个问题:     哪些内存需要回收?     什么时候回收?     怎么回收?下面将分别针对上面提出的问题一一解释:1)哪些内存需要回收 在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活...

2018-03-23 11:04:29

阅读数 65

评论数 0

JVM理解之运行时数据区

        Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。    ...

2018-03-22 15:06:33

阅读数 92

评论数 3

java设计模式

                                                                                     java常用设计模式理解一:什么是设计模式 设计模式是针对问题的解决方案,是套被反复使用、多数人知晓的、经过分类编目 的代码设计...

2017-10-23 19:16:14

阅读数 303

评论数 0

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