ConcurrentHashMap 从Java7 到 Java8的改变

一、关于分段锁 1.分段锁发展概况 集合框架很大程度减少了java程序员的重复劳动。在Java多线程环境中,以线程安全的方式使用集合类是一个首先考虑的问题。 能够保证线程安全的哈希表中,ConcurrentHashMap是大家都熟知的,也知道它内部使用了分段锁。然而,进入到Java8时代,分...

2019-03-17 19:33:00

阅读数 62

评论数 0

分布式之消息队列复习精讲

为什么写这篇文章? 博主有两位朋友分别是小A和小B: 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术...

2019-03-17 19:25:23

阅读数 49

评论数 0

Java高并发之无锁与Atomic源码分析

目录 无锁即无障碍的运行, 所有线程都可以到达临界区, 接近于无等待. 无锁采用CAS(compare and swap)算法来处理线程冲突, 其原理如下 CAS原理 CAS包含3个参数CAS(V,E,N).V表示要更新的变量, E表示预期值, N表示新值. 仅当V值等于E值时, 才...

2019-03-17 19:15:35

阅读数 48

评论数 0

AQS深入理解与实战----基于JDK1.8

要介绍AQS,首先要介绍“同步器”的概念。 同步器是一种抽象数据类型,在该类型的内部,维护了以下内容: 1.一个状态变量,该变量的不同取值可以表征不同的同步状态语义(例如表示一个锁已经被线程持有了还是没有任何线程持有); 2.能够更新和检查该状态变量值的操作(方法)集合; ...

2019-03-17 19:13:10

阅读数 57

评论数 0

ReentrantLock的使用

ReentrantLock(重入锁) public class MyService { private Lock lock = new ReentrantLock(); public void testMethod() { lock.lock(); ...

2019-03-17 19:08:46

阅读数 45

评论数 0

分布式系统的接口幂等性设计

在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次 ...

2019-03-13 12:19:49

阅读数 45

评论数 0

浅谈,分布式事务与解决方案

前言 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务...

2019-03-13 12:17:49

阅读数 67

评论数 0

【Java并发(一)】--synchronized详解(偏向锁、轻量级锁、锁的存储结构即升级过程)

简介: ​ 可能在很多人眼里,在java中提到锁、安全性、同步,首先想到的则是java提供的大佬(synchronized)。那么为什么在多线程下,单单靠一个关键字修饰代码块就可以实现所谓的安全性呢?可以说是对初学者而言及神奇又强大的存在。也成了大多数初学者百试不爽的良药。 ​ 但是在逐渐对j...

2019-03-12 21:34:02

阅读数 45

评论数 0

JVM内部细节之一:synchronized关键字及实现细节(轻量级锁Lightweight Locking)

在C程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作。然而在Java中除了提供Lock API外还在语法层面上提供了synchronized关键字来实现互斥同步原语。那么到底在JVM内部是怎么实现synchronized关键子的呢? 一、synchro...

2019-03-12 21:32:43

阅读数 28

评论数 0

Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级

一、Synchronized实现原理1、Synchronized锁的3中形式:Synchronized修饰普通同步方法:锁对象当前实例对象;Synchronized修饰静态同步方法:锁对象是当前的类Class对象;Synchronized修饰同步代码块:锁对象是Synchronized后面括号里配...

2018-06-30 14:39:51

阅读数 168

评论数 0

一致性哈希算法(Consistent Hashing)

应用场景 这里我先描述一个极其简单的业务场景:用4台Cache服务器缓存所有Object。 那么我将如何把一个Object映射至对应的Cache服务器呢?最简单的方法设置缓存规则:object.hashCode() % 4。 Cache 0: object.hashCode...

2017-09-15 14:13:24

阅读数 65

评论数 0

多线程下synchronized修饰static方法与非static方法的区别

代码如下: package atomic; public class JoinThread extends Thread { public static int i = 0; //public static AtomicInteger atomicInteger = new A...

2017-08-30 09:48:02

阅读数 108

评论数 0

Java并发编程:线程池的使用

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 ...

2017-08-25 11:11:42

阅读数 90

评论数 0

高并发系统之限流特技

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务...

2017-08-25 10:56:52

阅读数 152

评论数 0

java常用的几种线程池比较

1. 为什么使用线程池 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP 、 FTP 或 POP )、通过 JMS 队列或者可能通过轮询数据库。不...

2017-08-25 10:44:03

阅读数 114

评论数 0

简谈java中的阻塞非阻塞与同步异步

在学习java网络编程时,我遇到了同步/异步,阻塞/非阻塞着四种调用方式。在这里我就大概的说一下我对它们的理解。 同步/异步主要针对客户端:         同步:就是当客户端发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是说必须一件一件的事情去做,等一件做完了才能去做下...

2017-08-23 09:38:01

阅读数 84

评论数 0

Java并发编程:volatile关键字解析

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。   volatile关...

2017-08-22 15:32:22

阅读数 674

评论数 0

java多线程之生产者消费者经典问题

一个简单的生产者消费者的例子,适合初学者入门,如下所示 /**生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二,既然是生产者、消费者,那么生产者类和消费者类就是必须的 * 第三,生产什么,消费什么,所以物品类是必须的,这里是馒头类 * 第四,既然...

2017-08-22 15:27:35

阅读数 185

评论数 0

多线程(互斥锁、读写锁、条件变量、信号量、自旋锁)相关

概述 同步和互斥在多线程和多进程编程中是一个基本的需求,互相协作的多个进程和线程往往需要某种方式的同步和互斥。POSIX定义了一系列同步对象用于同步和互斥。 同步对象是内存中的变量属于进程中的资源,可以按照与访问数据完全相同的方式对其进行访问。默认情况下POSIX定义的这些同步对象具有进程...

2017-08-22 14:52:17

阅读数 1393

评论数 0

一道面试题比较synchronized和读写锁

一、科普定义 这篇博文的两个主角“synchronized”和“读写锁” 1)synchronized 这个同步关键字相信大家都用得比较多,在上一篇“多个线程之间共享数据的方式”中也详细列举他的应用,在这就不多说只做几点归纳: Java提供这个关键字,为防止资源冲突提供的内...

2017-08-22 14:35:56

阅读数 158

评论数 0

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