- 博客(15)
- 资源 (1)
- 问答 (4)
- 收藏
- 关注
转载 如何用redis优雅的实现分布式锁
前言在学习Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看做是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,即所有线程都在同一个JVM进程里的时候,使用Java语言提供的锁机制可以起到对共享资源进行同步的作用。如果分布式环境下多个不同线程需要对共享资源进行同步,那么用Java的锁机制就无法实现了,这个时候就必须借助分布式锁来解决分布式环境下共享资源的同步...
2018-08-31 22:45:41 252
转载 大话分布式锁
前言大多数互联网系统都是分布式部署的,分布式部署确实能带来性能和效率上的提升,但为此,我们就需要多解决一个分布式环境下,数据一致性的问题。 当某个资源在多系统之间,具有共享性的时候,为了保证大家访问这个资源数据是一致的,那么就必须要求在同一时刻只能被一个客户端处理,不能并发的执行,否者就会出现同一时刻有人写有人读,大家访问到的数据就不一致了。我们为什么需要分布式锁?在单机时代,虽然不...
2018-08-28 23:03:16 352
转载 刨根系列之volatile详解 (二)
前言在刨根系列之volatile详解中,我提到过:volatile只能保证可见性和有序性,无法保证原子性。关于这部分内容,有读者阅读之后表示还是不是很理解,所以我再单独写一篇文章深入分析一下。volatile与有序性在上一篇文章中我们提到过:volatile一个强大的功能,那就是他可以禁止指令重排优化。通过禁止指令重排优化,就可以保证代码程序会严格按照代码的先后顺序执行。那么volat...
2018-08-27 21:46:06 338
转载 JDK 5.0 中更灵活、更具可伸缩性的锁定机制
前言多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,...
2018-08-25 17:06:35 109
转载 扒一扒ReentrantLock以及AQS实现原理
前言提到JAVA加锁,我们通常会想到synchronized关键字或者是Java Util Concurrent(后面简称JUC)包下面的Lock,今天就来扒一扒Lock是如何实现的,比如我们可以先提出一些问题:当我们通实例化一个ReentrantLock并且调用它的lock或unlock的时候,这其中发生了什么?如果多个线程同时对同一个锁实例进行lock或unlcok操作,这其中又发生了什...
2018-08-25 11:58:57 129
原创 线程中断机制
前言之前我们捋清楚了线程中的sleep(),wait(),join()等方法,这里我们再来学习下java中的线程中断机制。中断是一种协作机制。当一个线程中断另一个线程时,被中断的线程不一定要立即停止正在做的事情。相反,中断是礼貌地请求另一个线程在它愿意并且方便的时候停止它正在做的事情。有些方法,例如 Thread.sleep(),很认真地对待这样的请求,但每个方法不是一定要对中断作出响应。对于...
2018-08-21 23:04:42 1227
转载 内存模型如何解决缓存一致性问题
前言我们都知道,由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距,提升计算机能力,人们在CPU和主存之间增加了多层高速缓存。每个CPU会有L1、L2甚至L3缓存,在多核计算机中会有多个CPU,那么就会存在多套缓存,那么这多套缓存之间的数据就可能出现不一致的现象。为了解决这个问题,有了内存模型。内存模型定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存的读写操作...
2018-08-20 22:18:35 1678
转载 有趣易懂的内存泄漏分析与实战
前言在地铁上看到的一篇内存泄漏的分析文章,讲的比较简单,这里备份下,有需要的小伙伴可以看看哈!何为内存泄漏和内存溢出内存溢出(OutOfMemory):你只有十块钱,我却找你要了一百块。对不起啊,我没有这么多钱。(给不起) 内存泄露(MemoryLeak):你有十块钱,我找你要一块。但是无耻的博主,不把钱还你了。(没退还) 关系:多次的内存泄露,会导致内存溢出。可以说内存泄漏是导致...
2018-08-19 18:45:18 348
原创 简析apache,tomcat,nginx
前言日常开发和生产中,我们都会经常用到tomcat,nginx,apache。但是有些小伙伴估计对这三个不太熟悉,只是停留在日常使用上,具体的概念可能并不是很清楚。这里简单整理一下这三者之间的区别和各自的特点。简单介绍Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。apache支持模块多,性能稳定,apache本身是静态解析......
2018-08-19 15:48:24 1618
转载 Spring中获取request的几种方法,及其线程安全性分析
前言在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求...
2018-08-16 21:58:16 149
转载 刨根系列之volatile详解
前言volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且其用法和语义也都是不尽相同的。尤其在C语言、C++以及Java中,都有volatile关键字。都可以用来声明变量或者对象。本文就围绕java中的volatile展开,主要介绍volatile的用法、volatile的原理,以及volatile是如何提供可见性和有序性保障的等。volatile的用法vola...
2018-08-15 21:57:32 438
原创 redis为啥那么快?
前言现在是内存数据库大行其道的时候,无论是redis还是Memcached 。在处理大数据量高并发请求的时候,他们的优异性能是传统关系型数据库无法比拟的。内存数据库在快速响应的上独领风骚。但是也并不是说,关系型数据即将淘汰。如果将redis作为一个持久化数据库来使用想必也是不合适的。我们都知道redis的响应很快,但是是什么支撑着redis在面对大流量请求时能够从容不迫呢?为何redi...
2018-08-13 21:34:26 1798 1
转载 synchronized底层原理
前言对于程序员来说,synchronized只是个关键字而已,用起来很简单。之所以我们可以在处理多线程问题时可以不用考虑太多,就是因为这个关键字帮我们屏蔽了很多细节。 那么,本文就围绕synchronized展开,主要介绍其用法、原理,以及如何提供原子性、可见性和有序性保障的等。synchronized的用法synchronized是Java提供的一个并发控制的关键字。主要有两种用法...
2018-08-10 22:12:45 275
原创 捋捋sleep(),wait(),join(),yield()
前言常见的线程操作方法有很多,我们通过调用这些方法来进行线程的切换和调度。这里来和大家一起捋捋这些常用的方法。sleep()sleep()是属于Thread类的方法,sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不...
2018-08-08 23:41:35 172
转载 深入hibernate的三种状态
前言学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态或临时状态),persistent(持久化状态)以及detached(离线状态游离状态),大伙也许也知道这三者之间的区别,比如瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session中不存在该对象。但是这些远远不够的...
2018-08-01 23:03:23 169
Java+内存分析工具+MAT
2023-08-19
websocket实现聊天小demo
2023-05-12
aspose导出pdf乱码,配置字体库
2023-02-25
windows 2008 R2解决socket连接不释放补丁包
2019-01-17
aspose操作word文档,目录问题
2022-09-05
苹果退款接收latest_receipt_info数组里面的对象问题
2021-11-18
苹果商品内购,服务端提供接口订阅通知消息
2021-09-13
java.io.IOException: Premature EOF异常怎么解决
2020-09-17
jdk中的jre/lib/security目录下为啥要导入证书
2019-12-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人