随笔分类 -  java - 并发

摘要:提到JAVA加锁,我们通常会想到synchronized关键字或者是Java Concurrent Util(后面简称JCU)包下面的Lock,今天就来扒一扒Lock是如何实现的,比如我们可以先提出一些问题:当我们通过实例化一个ReentrantLock并且调用它的lock或unlock的时候,这其 阅读全文
posted @ 2019-04-30 10:17 myseries 阅读(835) 评论(0) 推荐(0) 编辑
摘要:Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现 阅读全文
posted @ 2019-04-29 16:40 myseries 阅读(256) 评论(0) 推荐(0) 编辑
摘要:分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇将介绍如何正确地 阅读全文
posted @ 2019-04-28 17:25 myseries 阅读(3375) 评论(0) 推荐(0) 编辑
摘要:一:java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的) (1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是Reentrant 阅读全文
posted @ 2019-04-28 15:05 myseries 阅读(52378) 评论(0) 推荐(16) 编辑
摘要:围绕下面四个点展开叙述: 一:什么是CAS机制? 二:Java当中CAS的底层实现 三:CAS的ABA问题和解决方法 四:java8对CAS的优化 一:什么是CAS机制? 我们先看一段代码: 启动两个线程,每个线程中让静态变量count循环累加100次。 public class Test4 { p 阅读全文
posted @ 2019-04-26 12:42 myseries 阅读(888) 评论(0) 推荐(0) 编辑
摘要:重量级锁?自旋锁?自适应自旋锁?轻量级锁?偏向锁?悲观锁?乐观锁?执行一个方法咋这么辛苦,到处都是锁。 今天这篇文章,给大家普及下这些锁究竟是啥,他们的由来,他们之间有啥关系,有啥区别。 重量级锁 如果你学过多线程,那么你肯定知道锁这个东西,至于为什么需要锁,我就不给你普及了,就当做你是已经懂的了。 阅读全文
posted @ 2019-04-26 10:56 myseries 阅读(1198) 评论(0) 推荐(2) 编辑
摘要:前提知识: Java内存模型(JMM)是一个概念模型,底层是计算机的寄存器、缓存内存、主内存和CPU等。 多处理器环境下,共享数据的交互硬件设备之间的关系: JMM: 从以上两张图中,谈一谈以下几个概念: 1.缓存一致性协议(MESI): 由于每个处理器都含有私有的高速缓存,在对缓存中数据进行更新后 阅读全文
posted @ 2019-04-18 16:08 myseries 阅读(410) 评论(0) 推荐(0) 编辑
摘要:我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 阅读全文
posted @ 2019-04-11 16:57 myseries 阅读(2253) 评论(0) 推荐(0) 编辑
摘要:出处:http://www.importnew.com/26850.html 正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。 本文涉及到的知识点:thread.join(), object.wait(), obje 阅读全文
posted @ 2019-04-11 16:52 myseries 阅读(358) 评论(0) 推荐(0) 编辑
摘要:出处:https://blog.csdn.net/iteye_2474/article/details/82512318 问题:一个类中同步方法被调用时,它的其他方法是否可以同时被调用? 正确的回答应该:是该类中其他同步方法不能被同时调用,但非同步方法可以被调用。下面给出例子。 结果console: 阅读全文
posted @ 2019-04-08 21:39 myseries 阅读(917) 评论(0) 推荐(0) 编辑
摘要:线程对象 每一个线程都是和类Thread的实例相关联的。在Java中,有两种基本的使用Thread对象的方式,可用来创建并发性程序。 1.在应用程序需要发起异步任务的时候,只要生成一个Thread对象即可(继承Thread类和实现runnable接口),这样可以直接控制线程的创建并对其进行管理。 2 阅读全文
posted @ 2018-03-24 12:44 myseries 阅读(895) 评论(0) 推荐(0) 编辑
摘要:volatile: [ˈvɑlətl] 单词含义:易变的,不稳定的; (液体或油)易挥发的; 爆炸性的; 快活的,轻快的; volatile在多线程并发中用途非常广,原因是它有两个特性: 基础概念:Java 内存模型中的可见性、原子性和有序性。 可见性: 可见性是一种复杂的属性,因为可见性中的错误总 阅读全文
posted @ 2018-03-24 00:38 myseries 阅读(263) 评论(0) 推荐(0) 编辑
摘要:1:基础概念 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 阅读全文
posted @ 2018-03-22 22:14 myseries 阅读(275) 评论(0) 推荐(0) 编辑