自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 并发工具四之线程池

线程池

2020-07-01 12:41:56 316

原创 并发工具三之CyclicBarrier

一、CyclicBarrier简介CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作。CyclicBarrier 默认的构造方法是 CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用 await 方法告诉 CyclicBarrier 当前线程已经到达了屏障,然后当前线程被阻塞二、

2020-06-27 16:37:35 144

原创 并发工具二之Semaphore

一、Semaphore简介semaphore 也就是我们常说的信号灯,semaphore 可以控制同时访问的线程个数,通过 acquire 获取一个许可,如果没有就等待,通过 release 释放一个许可。有点类似限流的作用。二、Semaphore使用案例semaphore叫信号灯的原因也和他的用处有关,比如某商场就3 个停车位,每个停车位只能停一辆车,如果这个时候来了 10 辆车,必须要等前面有空的车位才能进入。定义一个停车的线程,每次都先去获取令牌(acquire),然后再释放令牌(releas

2020-06-27 15:43:22 148

原创 并发工具一之CountDownLatch

并发工具

2020-06-26 23:15:28 145

原创 并发编程之阻塞队列

阻塞队列

2020-06-25 23:36:53 123

原创 Condition的源码分析和简单认识

awaitsignal

2020-06-14 23:26:44 137

原创 从ReentrantLock源码分析,理解AQS应用

认识AQS及浅析实现原理

2020-06-07 22:17:48 139

原创 AQS的源码简答分析-AQS结构

AQS是什么?在 Lock 中,用到了一个同步队列 AQS,全称AbstractQueuedSynchronizer,它是一个同步工具也是 Lock 用来实现线程同步的核心组件。如果你搞懂了 AQS,那么 J.U.C 中绝大部分的工具都能轻松掌握。AQS的两种功能从使用层面来说,AQS 的功能分为两种:独占和共享独占锁,每次只能有一个线程持有锁,比如 J.U.C包下的的 ReentrantLock 就是以独占方式实现的互斥锁共 享 锁 , 允 许 多 个 线 程 同 时 获 取 锁 , 并 发 访

2020-06-01 23:09:22 160

原创 认识传说中的CAS

认识传说中的CAS

2020-05-30 23:28:23 226

原创 线性探测解决hash冲突

我们来简单的例子说明什么是线性探测假设我们有一个数组假设我们用当前公式计算当前数据在数组中的下标位置int i = num%11;假设我们有一组数据{1,2,3,11,12,13,14}需要放置在数组中那么他们对应的下标位置应该分别为数据:1 下标:1%11 = 1数据:2 下标:2%11 = 2数据:3 下标:3%11 = 3数据:11 下标:11%11 = 0数据:12 下标:12%11 = 1数据:13 下标:13%11 = 2数据:14

2020-05-30 15:25:38 601

原创 强引用,软引用,弱引用,虚引用的区别认识

强引用我们使用的大部分的引用都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题public static void main(String[] args) { Object strong = new Object(); Object obj = strong; strong = null; S

2020-05-30 14:22:25 121

原创 一点点ThreadLocal的原理分析

一点点ThreadLocal的原理分析

2020-05-30 00:39:14 101

原创 手把手教你写一个死锁

之前看到一个小伙伴分享的面试题,笔试阶段让写一个死锁,有点意思。什么是死锁、活锁?学过多线程,大家多锁应该不陌生死锁: 一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。活锁: 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复“”尝试—失败—尝试—失败“”的过程。处于活锁的实体是在不断的改变状态,活锁有可能解开继续往下运行。死锁发生的条件?这四个条件同时满足,就会产生死锁。1.互斥,共享资源 X 和 Y 只能被一个线程占用;2.占有且等待,线程 T1 已经取得共

2020-05-29 16:43:06 1079 1

原创 join、yield、sleep方法的认识

一、join()方法(插队)/** * Waits for this thread to die. * * <p> An invocation of this method behaves in exactly the same * way as the invocation * * <blockquote> * {@linkplain #join(long) join}{@code (0)} * &l

2020-05-29 15:30:14 178

原创 线程之间通信方式讲解

线程通信 wai/notify

2020-05-29 14:38:19 175

原创 Happen-before原则的浅谈

Happens-Before模型除了我们常见的显示引用volatile关键字能够保证可见性以外,在Java中,还有很多的可见性保障的规则。从JDK1.5开始,引入了一个happens-before的概念来阐述多个线程操作共享变量的可见性问题。所以我们可以认为在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作必须要存在happens-before关系。这两个操作可以是同一个线程,也可以是不同的线程。程序顺序规则(as-if-serial语义)a.不能改变程序的执行结果(在单线程环境

2020-05-29 13:24:16 487

原创 内存屏障的简单介绍

JMM 层面的内存屏障为了保证内存可见性,Java 编译器在生成指令序列的适当位置会插入内存屏障来禁止特定类型的处理器的重排序,在 JMM 中把内存屏障分为四类看过volatile关键字底层实现我们会发现,源码中就应用了内存屏障storeload()本文是综合自己的认识和参考各类资料(书本及网上资料)编写,若有侵权请联系作者,所有内容仅代表个人认知观点,如有错误,欢迎校正; 邮箱:[email protected] 博客地址:https://blog.csdn.net/qq_35576976/.

2020-05-29 12:15:00 275

原创 java内存模型(JMM模型)

java内存模型(JMM模型)

2020-05-29 12:14:35 891

原创 缓存一致性协议(MESI)的简单认识

缓存一致性协议(MESI)

2020-05-28 19:46:19 1026 1

原创 线程安全性的本质volatile关键字原理

violate关键字原理

2020-05-28 17:38:20 221 2

原创 对synchronized关键字的一点理解

线程安全性问题多线程技术的引用能够提升程序的处理性能,同时,也带来了很多麻烦,举个简单的例子多线程对于共享变量访问带来的安全性问题如下面的代码:public class SynchronizedTest extends Thread{ private static int count=0; public static void inc(){ try { Thread.sleep(1); } catch (InterruptedE

2020-05-21 16:52:35 123

原创 认识java线程

一、java中线程的创建1.继承Thread类2.实现Runable接口3.实现Callable/Future接口,带返回值二、线程的生命周期线程既然能被创建,势必也能被销毁,所以说线程是存在生命周期的,线程的生命周期分为6种状态:NEW: 初始状态,线程被构建,但是还没有调用 start 方法RUNNABLE: 运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行状态”BLOCKED: 阻塞状态,表示线程竞争锁失败,被放到锁队列中的状态WAITING: 阻塞状态,表示线

2020-05-20 16:40:07 105

原创 线程出现的意义

一、线程的发展真空管和穿孔打卡-晶体管和批处理系统-集成电路和多道程序设计二、进程和线程的区别进程和线程区别摘自此文章进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位,简单理解为系统中正在运行的一个应用程序线程:是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位进程和线程的关系:(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)

2020-05-17 15:49:40 883

原创 一篇文章教你spring源码搭建和跳过本人踩过的坑

#Spring5源码下载搭建注意事项1.JDK需要升级到1.8以上。2.由于Spirng5以后都是采用Gradle来编译,gradle版本4.3.1,下载地址:https://gradle.org/next-steps/?version=4.3.1&format=bin,下载下来解压即可,无需安装3.Spring3.0开始,Spring源码采用github托管,不再提供官网下载链接。...

2020-04-19 16:29:24 1992

原创 一篇文章让你轻松搞定springboot+activiti

最近项目中用到activiti工作流,项目具体项目中流程的东西不是本人负责,但多学点东西总归是好的,所以待项目空闲下来,自己学习一下。仅供自己及爱好学习者参考。第一节:搭建activiti流程编辑器(Activiti Designer)流程编辑可有三种方式:eclipse在线安装打开Eclipse -&amp;amp;amp;amp;amp;gt; Help -&amp;amp;amp;amp;amp;gt; Install New SoftWare-&amp;a

2019-01-21 15:44:48 4573 1

原创 开篇 心得体会

转行做JAVA有几年了,从培训机构小白出身,到现在积累了几年工作经验,先后经过几个项目,对这一行也有了一定认识,在技术更迭如此快的时代,越发感觉自身不足,年龄危机越来越近,只有壮大自己才能在后续的日子里站住脚跟,准备陆续记录自己的学习经历和问题解决。 因为过去执着于加班工作,完成任务,对于技术方面的基础知识了解其实并不系统和熟练,很多东西只是会用,却根本不知道所以然,不会的东西都是百度...

2019-01-10 10:19:34 141

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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