4 gghh2015

尚未进行身份认证

暂无相关简介

等级
TA的排名 3w+

并发中锁的分类

1、自旋锁线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁切换上下文不值得。jvm使线程在没有获得锁的时候,执行空循环,循环几次之后,如果还没获得锁,再被挂起。2、阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间)时,才可以进去线程的准备就绪状态,转为就绪状态的所有线程,通过竞争,进去运行状态。3、重入锁支持线程再次进入的锁。4、读写...

2019-08-09 09:08:57

volatile和synchronized

如何把非原子性操作变成原子性操作?1、volatile关键字只能保证可见性,并不保证原子性2、synchronized关键字,使操作具有原子性区分一下synchronize内置锁和互斥锁1、内置锁,在对象头,自动获取释放,获得的唯一方式,进入锁保护的同步代码块2、互斥锁,内置锁就是一个互斥锁,当有多个线程获取锁时,只有一个能获取成功,其他线程阻塞等待。synchronized修饰范围...

2019-08-07 09:34:28

ReentrantLock源码分析

首先,想先梳理一下自己看源码的目的,最近有篇文章特别火《程序员12小时惊魂记:凌晨迁移数据出大事故!》,里面强调了解决问题的能力很重要,这给我一种只看源码和设计模式关键时刻不给力的感觉,周末去看了鲁能和恒大的比赛,那种在瞬间做出决策的压力只会比事故现场更紧张,而且不能有一点犹豫。我想竞技体育的魅力,就在于此吧,要把所有的技能都训练到潜意识层面,才会在瞬间爆发出来。所以,要不断的研究不断的实践,弄懂...

2019-08-06 00:17:46

如何搭建一个前后端分离的项目

作为一个后端开发,对于带页面的工程,就会写jsp,vm是不是有点落后了。其实对于这两种我的认知也比较简单,jsp的使用:返回String就是jsp的路径(时间太过久远,好像是这样)@RequestMapping(value="/userList",method=RequestMethod.GET)privateStringuserList(Modelmodel)throws...

2019-07-24 09:12:47

Iterator死循环

iterator不能放在循环里,每次都会获得一个新的迭代器,导致死循环。要先获取迭代器,然后对迭代器循环。publicstaticvoidmain(String[]args){//正确Iterator<String>it=getList().iterator();while(it.hasNext()){...

2019-07-17 21:44:31

偏向锁,轻量级锁与重量级锁的区别

转自:https://blog.csdn.net/choukekai/article/details/63688332锁的量级说明锁的竞争程度。偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程来访问它的时候。它是可偏向的,意味着,它现在认为只可能有一个线程来访问它,所以当第一个线程来访问它的时候,它会偏向这个线程,此时,对象持有偏向锁。偏向第一个线程...

2019-07-16 22:04:23

并发容器和框架

1、HashMap和Hashtable的区别HashMap和Hashtable都实现了Map接口,主要的区别有:线程安全性,同步(synchronization),以及速度。HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(**HashMap可以接受为null的键值(key)**和值(value),而Hashtable则不行)。...

2019-07-16 08:59:15

Lock接口,和Synchronized区别,分布式锁

什么是锁:同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线程结束同步代码块取消标记后再去尝试设置标记。这个标记可以理解为锁。在单进程情况下,多个线程访问同一资源,可以使用synchronized和lock实现。在多进程情况下...

2019-07-13 19:34:34

Java分布式锁看这篇就够了

原文出自:https://www.cnblogs.com/seesun2012/p/9214653.htmlhttps://blog.csdn.net/seesun2012###什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在...

2019-07-13 18:40:30

SQL中# 与$ 的区别

转自:https://www.cnblogs.com/luohanguo/p/9122398.html区别:(1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:orderby#user_id#,如果传入的值是id,则解析成的sql为orderby“id”。(2)$将传入的数据直接显示生成在sql中。如:orderbyuseriduser_iduseri​d,...

2019-07-11 17:55:35

Elasticsearch 如何做映射mapping

转自:https://blog.csdn.net/zhousenshan/article/details/829288271、什么是映射  映射:创建索引的时候,可以预先定义字段的类型以及相关属性(比如说让某字段是否存储、用那种分析器、重要级别)Elasticsearch可定义...

2019-07-09 17:30:01

场景优化-工厂模式和策略模式(非常实用且常用的设计模式)

问题:随着业务代码的复杂度增加,我们的代码中出现了大量的if-else,一坨一坨的,类特别大,非常难看,而且还伴随着大量的重复代码,特别容易隐藏坑,比如增加或修改场景时,需要把所有重复的代码都改一遍,如果有遗漏就会产生bug。目的:所以要拆解类,要对重复代码抽象。如何实现:使用工厂模式、策略模式、工厂+策略模式对代码拆解。...

2019-07-06 18:21:12

java并发-独占锁与共享锁

转自:https://blog.csdn.net/wojiushiwo945you/article/details/422929991锁的独占与共享   java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享...

2019-06-28 09:21:11

java并发等待/通知的经典范式

分为两部分,等待方和通知方:等待方:(1)获取对象的锁(2)如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。(3)条件满足则执行对应的逻辑。对应伪代码:synchronized(对象){ while(条件不满足){ 对象.wait(); } 对应的处理逻辑}通知方:(1)获得对象的锁(2)改变条件(3)通知所有等待在对象上的线程对应的伪...

2019-06-14 11:26:40

MySQL索引优化

1、使用组合索引2、什么情况下要注意where条件的顺序(索引列顺序)3、善于使用in(使用in优化了什么)4、orderby如何优化(结合索引)5、覆盖索引6、删除冗余索引7、什么时候使用重复索引8、避免使用范围查询(多个范围查询如何优化)9、前缀索引10、理解二级索引11、什么情况使用索引情况会更糟...

2019-05-29 22:12:48

Spring编程式事务回滚踩坑

基于TransactionDefinition、PlatformTransactionManager、TransactionStatus编程式事务管理是Spring提供的最原始的方式,通常我们不会这么写,但是了解这种方式对理解Spring事务管理的本质有很大作用。基于TransactionTemplate的编程式事务管理是对上一种方式的封装,使得编码更简单、清晰。基于Tra...

2019-05-27 11:07:36

java异常类型

转自:http://c.biancheng.net/view/1038.html异常类型在Java中所有异常类型都是内置类java.lang.Throwable类的子类,即Throwable位于异常类层次结构的顶层。Throwable类下有两个异常分支Exception和Error,如图1所示。图1异常结构图由图2可以知道,Throwable类是所有异常和...

2019-05-27 11:04:35

Spring事务回滚配置

1、Spring的默认事务机制,当出现unchecked异常时候回滚,checked异常的时候不会回滚;unchecked异常包括error和runtime异常;checked异常包括IOException异常,需要trycatch或向上抛出异常。程序在抛出runtime异常的时候才会进行回滚,其他异常不会回滚,当然可以通过配置让所有异常都回滚:@Transaction(rollbackFo...

2019-05-27 10:59:26

Spring声明式事务调用关系

(4月份的时候,看了一下事务的使用,写了4份笔记,分享一下。)Spring中生成代理的方式有两种:JDK动态代理和CGLlib。JDK只能代理带接口的,cglib有没有接口都行。问题一、假如一个类里有两个方法,a有事务,b没有事务。如果在b里调用a,那么b会有事务吗?分析:1、对目标类和代理类使用方式是一样的,甚至你都不知道它是代理类。所以代理类和目标类的类型要兼容,对外接口一致。...

2019-05-27 10:58:21

JMM-java内存模型

在并发编程中,需要处理的两个关键问题:1、线程之间如何通信。2、线程之间如何同步。线程之间的通信机制有两种:1、共享内存。2、消息传递。共享内存的并发模型里,线程之间共享程序的公共状态,通过读-写内存中的公共状态进行隐式通信。消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式通信。JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程...

2019-05-03 17:12:04

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。