![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java 数据同步
文章平均质量分 94
茅坤宝骏氹
语言:Java、C/C++、C#、Python、Linux Shell。
框架:Spring、Spring MVC、Spring Boot、Spring Cloud、Hibernate、Mybatis、Freemarker、Velocity。
前端:HTML5、CSS3、JavaScript、Bootstrap、JQuery、Vue、React。
数据库:oracle、mysql、MongoDB、HBase。
缓存:Memcache、Redis。
消息队列:kafka。
大数据:Hadoop、Hive、Sqoop、Flume、Spark、Strom、OpenTSDB、Druid。
展开
-
面试官让我讲讲Java中的锁,我笑了
转载自面试官让我讲讲Java中的锁,我笑了在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些分类并不是全是指...转载 2020-01-18 20:29:41 · 272 阅读 · 0 评论 -
Jdk1.8 JUC源码增量解析(1)-atomic-Striped64
转载自 Jdk1.8 JUC源码增量解析(1)-atomic-Striped64功能简介:Striped64是jdk1.8提供的用于支持如Long累加器,Double累加器这样机制的基础类。Striped64的设计核心思路就是通过内部的分散计算来避免竞争(比如多线程CAS操作时的竞争)。Striped64内部包含一个基础值和一个单元哈希表。没有竞争的情况下,要累加的数会累加到这个基础值上;如果有...转载 2018-06-07 09:37:45 · 221 阅读 · 0 评论 -
如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
转载自 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Jav...转载 2018-06-07 09:38:09 · 228 阅读 · 0 评论 -
正确使用 Volatile 变量
转载自 Java 理论与实践 - 正确使用 Volatile 变量 - volatile 变量使用指南Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 vola...转载 2018-06-07 09:38:25 · 192 阅读 · 0 评论 -
Java 中的双重检查(Double-Check)
转载自 Java 中的双重检查(Double-Check)在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用。该模式的结构如下所示:public Resource getResource() { if (resource == null) { synchronized(this){ if...转载 2018-06-07 09:38:55 · 278 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
转载自 Java并发编程:volatile关键字解析 一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数...转载 2018-07-20 09:30:18 · 181 阅读 · 1 评论 -
Java并发编程:深入剖析ThreadLocal
转载自 Java并发编程:深入剖析ThreadLocal 一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。 这句话从字面上看起来很容易理解,但是真正理解并不是那么容易。 我们...转载 2018-07-20 09:30:50 · 130 阅读 · 0 评论 -
Java synchronized 中的while 和 notifyAll
转载自 Java synchronized 中的while 和 notifyAll 问题1 为什么是while 而不是if大多数人都知道常见的使用synchronized代码:synchronized (obj) { while (check pass) { wait(); } // do your business}那么问题是为...转载 2018-07-21 11:10:51 · 291 阅读 · 0 评论 -
Java并发编程:Lock
转载自 Java并发编程:Lock 一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只...转载 2018-07-21 11:33:25 · 124 阅读 · 0 评论 -
深入Synchronized和java.util.concurrent.locks.Lock的区别详解
转载自 深入Synchronized和java.util.concurrent.locks.Lock的区别详解 本篇文章是对Synchronized和java.util.concurrent.locks.Lock的区别进行了详细的分析介绍,需要的朋友参考下主要相同点:Lock能完成Synchronized所实现的所有功能。主要不同点:Lock有比Synchronized更精确的线程予...转载 2018-07-21 11:33:39 · 216 阅读 · 0 评论 -
Java 多线程 —— 深入理解 volatile 的原理以及应用
转载自 Java 多线程 —— 深入理解 volatile 的原理以及应用 推荐阅读:《java 多线程—线程怎么来的》这一篇主要讲解一下volatile的原理以及应用,想必看完这一篇之后,你会对volatile的应用原理以及使用边界会有更深刻的认知。本篇主要内容: volatile 读写同步原理 volatile重排序原则 volatile应用 关键字...转载 2018-07-21 11:33:55 · 186 阅读 · 0 评论 -
Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator
转载自 Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator功能简介:LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,LongAdder要比AtomicLong拥有更高的吞吐量,但会耗费更多的内存空间。LongAccumula...转载 2018-06-07 09:37:25 · 225 阅读 · 0 评论 -
Java8 Striped64 和 LongAdder
转载自 Java8 Striped64 和 LongAdder数据 STRIPING根据维基百科的这段说明:In computer data storage, data striping is the technique of segmenting logically sequential data, such as a file, so that consecutive segments ar...转载 2018-06-07 09:35:27 · 365 阅读 · 0 评论 -
一分钟理解Java公平锁与非公平锁
转载自一分钟理解Java公平锁与非公平锁和朋友聊天他提到:ReentrantLock 的构造函数可以传递一个 bool 数据,true 时构造的是“公平锁”、false 时构造的是“非公平锁”。我的印象中锁是不区分类型的,所以认为这应该是 Java 发明的概念,于是就恶补了一下。锁的底层实现无论什么语言在操作系统层面锁的操作都会变成系统调用(System Call),以 Lin...转载 2019-05-04 12:33:21 · 656 阅读 · 0 评论 -
再有人问你synchronized是什么,就把这篇文章发给他。
转载自 再有人问你synchronized是什么,就把这篇文章发给他。在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在《深入理解Java虚拟机》中,有这样一段话:synch...转载 2018-10-19 12:37:42 · 159 阅读 · 0 评论 -
再有人问你volatile是什么,就把这篇文章发给他
转载自 再有人问你volatile是什么,就把这篇文章发给他在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在前一篇文章中,我们也介绍了synchronized的用法及原理。本文,来分析...转载 2018-10-19 12:35:28 · 189 阅读 · 0 评论 -
再有人问你volatile是什么,把这篇文章也发给他(深入分析)
转载自 再有人问你volatile是什么,把这篇文章也发给他在上一篇文章中,我们围绕volatile关键字做了很多阐述,主要介绍了volatile的用法、原理以及特性。在上一篇文章中,我提到过:volatile只能保证可见性和有序性,无法保证原子性。关于这部分内容,有读者阅读之后表示还是不是很理解,所以我再单独写一篇文章深入分析一下。阅读本文之前,请先阅读上一篇文章:再有人问你volatil...转载 2018-10-13 20:42:08 · 221 阅读 · 0 评论 -
一文带你理解Java中Lock的实现原理
转载自 一文带你理解Java中Lock的实现原理当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java底层支持的,而concurrent包则是jdk实现。关于synchronized的原理可以阅读再有人问你syn...转载 2018-10-05 11:47:37 · 544 阅读 · 0 评论 -
Java中CAS详解
转载自 Java中CAS详解在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatil...转载 2018-08-13 09:49:18 · 121 阅读 · 0 评论 -
一道非常棘手的 Java 面试题:i++ 是线程安全的吗
转载自 一道非常棘手的 Java 面试题:i++ 是线程安全的吗i++ 是线程安全的吗?相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼。内心肯定还在质疑,i++ 居然还有线程安全问题?只能说自己了解的不够多,自己的水平有限。先来看下面的示例来验证下 i++ 到底是不是线程安全的。1000个线程,每个线程对共享变量 count 进行 100...转载 2018-07-30 12:56:58 · 8703 阅读 · 3 评论 -
避免同步死锁
翻译自 避免同步死锁在我之前的文章“ Double-Checked Locking:Clever,but Broken ”(JavaWorld,2001年2月),我描述了几种常用的避免同步的技术实际上是不安全的,并建议了一个“如有疑问,同步”的策略。一般来说,只要您正在读取以前可能由另一个线程写入的变量,或者您正在编写可能随后被另一个线程读取的变量,就应该进行同步。此外,尽管同步带来了性能损失,...翻译 2018-06-27 11:58:49 · 560 阅读 · 0 评论 -
Java 并发工具包 java.util.concurrent 用户指南
转载自 Java 并发工具包 java.util.concurrent 用户指南1. java.util.concurrent - Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。本文我将带你一一认识 ...转载 2018-06-09 09:18:05 · 158 阅读 · 0 评论 -
线程间协作的两种方式:wait、notify、notifyAll和Condition
转载自 线程间协作的两种方式:wait、notify、notifyAll和Condition在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让...转载 2018-06-07 09:29:21 · 207 阅读 · 0 评论 -
Java中的读/写锁
转载自 Java中的读/写锁 原文链接 作者:Jakob Jenkov 译者:微凉 校对:丁一相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源...转载 2018-07-21 11:34:09 · 165 阅读 · 0 评论 -
详解Java多线程编程中LockSupport类的线程阻塞用法
转载自 详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数:public native void unpark(Thread jthread); public native...转载 2018-07-21 11:40:12 · 291 阅读 · 0 评论 -
java并发编程之4——Java锁分解锁分段技术
转载自 java并发编程之4——Java锁分解锁分段技术 并发编程的所有问题,最后都转换成了,“有状态bean”的状态的同步与互斥修改问题。而最后提出的解决“有状态bean”的同步与互斥修改问题的方案是为所有修改这个状态的方法都加上锁,这样也就可以保证他们在修改bean的状态的时候是顺序进行的。但是这样整个过程的瓶颈也就是被加锁的这段代码。由此就产生了很多对程序加锁的优化思想,从整体上来看...转载 2018-07-30 12:55:46 · 2744 阅读 · 1 评论 -
Java 并发实践 — ConcurrentHashMap 与 CAS
转载自 Java 并发实践 — ConcurrentHashMap 与 CAS最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念。限流算法很多,我主要就以最简单的计数器法来做引。先抽象化一下需求:统计每个接口访问的次数。一个接口对应一个url,也就是一个字符串,每调用一次对其进行加一处理。可能出现的问题主要有三个:多线程访问,需...转载 2018-05-07 11:07:02 · 519 阅读 · 0 评论 -
Java多线程sleep和wait的区别,总结得非常好
转载自 Java多线程sleep和wait的区别,总结得非常好我们都知道sleep是让线程休眠,到时间后会继续执行,wait是等待,需要唤醒再继续执行,那么这两种方法在多线程中的表现形态,它们各有什么区别呢?可以总结为以下几点。使用上从使用角度看,sleep是Thread线程类的方法,而wait是Object顶级类的方法。sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用。CP...转载 2018-04-28 09:56:28 · 250 阅读 · 0 评论 -
并发编程 – Concurrent 用户指南
转载自 并发编程 – Concurrent 用户指南1. java.util.concurrent – Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。本文我将带你一一认识 java.util.concur...转载 2018-05-08 10:16:50 · 196 阅读 · 0 评论 -
一个诡异的"可见性"问题
转载自 一个诡异的"可见性"问题之前介绍过可见性的特性,最近做测试的时候发现了一个很诡异的问题,下面看看这三个例子。test1:test1这个例子加了volatile,所以程序正确退出输出test1 endtest2:test2这个例子没有加volatile,程序也正常退出并输出一堆0并输出了test2 end,这是为什么呢?没有加volatile为什么也有可见性?看起来是很诡异的问题,问题是在w...转载 2018-05-02 13:03:41 · 281 阅读 · 0 评论 -
什么是CAS机制?(进阶篇)
转载自 永远爱大家的 程序员小灰这一期我们来深入介绍之前遗留的两个问题:Java当中CAS的底层实现CAS的ABA问题和解决方法首先看一看AtomicInteger当中常用的自增方法 incrementAndGet:public final int incrementAndGet() {for (;;) {int current = get();int next = current + 1;...转载 2018-04-12 15:18:36 · 2668 阅读 · 0 评论 -
多线程并发神器--ThreadLocal
转载自 多线程并发神器--ThreadLocal什么是ThreadLocal可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题。ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程。首先看看ThreadLocal的类结构其中可重写的方法有以下几个initialValue():ThreadLocal初始化的值,新建ThreadLocal...转载 2018-04-29 20:08:20 · 172 阅读 · 0 评论 -
深入理解CAS算法原理
转载自 深入理解CAS算法原理1、什么是CAS?CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。2、CAS算法理解 对CAS的理解...转载 2018-04-29 20:06:52 · 5885 阅读 · 0 评论 -
漫画:什么是volatile关键字?(整合版)
转载自 永远爱大家的 程序员小灰————— 第二天 —————————————————Java内存模型简称JMM(Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在转载 2018-04-13 22:06:16 · 222 阅读 · 0 评论 -
Java 可重入锁内存可见性分析
转载自 深度好文 | Java 可重入锁内存可见性分析一个习以为常的细节之前在做 ReentrantLock 相关的试验,试验本身很简单,和本文相关的简化版如下:(提示:以下代码均可左右滑动)private static ReentrantLock LOCK = new ReentrantLock();private static int count = 0;...// 多线程 run 如下...转载 2018-04-23 13:33:58 · 739 阅读 · 1 评论 -
什么是 CAS 机制
转载自 永远爱大家的 程序员小灰示例程序:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果是什么呢?一定会是200吗?加了同步锁之后,count自增的操作变成了原子性操作,所以最终的输出一定是count=200,代码实现了线程安全。为什么这么说呢?关键在于性能问题。Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁...转载 2018-04-12 15:00:25 · 410 阅读 · 0 评论 -
面试必问的 CAS ,要多了解
转载自 面试必问的 CAS ,要多了解前言CAS(Compare and Swap),即比较并替换,实现并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执行的安全性。CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返回fal...转载 2018-05-07 11:07:35 · 150 阅读 · 0 评论 -
乐观锁的一种实现方式——CAS
转载自 乐观锁的一种实现方式——CAS在深入理解乐观锁与悲观锁一文中我们介绍过锁。本文在这篇文章的基础上,深入分析一下乐观锁的实现机制,介绍什么是CAS、CAS的应用以及CAS存在的问题等。线程安全众所周知,Java是多线程的。但是,Java对多线程的支持其实是一把双刃剑。一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题。线程安全性可能是非常复杂的,在没有充足的同步的情况下,...转载 2018-05-22 10:37:43 · 456 阅读 · 0 评论 -
java笔记--关于线程同步(7种同步方式)
转载自 java笔记--关于线程同步(7种同步方式) 为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 1.同步方法 即有synchroniz...转载 2018-07-30 12:55:34 · 136 阅读 · 0 评论 -
彻底理解ThreadLocal
转载自 彻底理解ThreadLocal 先总述,后分析 深挖过threadLocal之后,一句话概括:Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。 数据隔离的秘诀其实是这样的,Thread有个Thead...转载 2018-07-30 12:55:25 · 1861 阅读 · 1 评论