自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

加多的博客

关注并发编程,开源框架,架构设计,微信公众号:技术原始积累

  • 博客(33)
  • 资源 (2)
  • 收藏
  • 关注

原创 基于信号量的生产消费模型

一、前言上篇 https://www.jianshu.com/p/6402676abc86 文章讲解了一个定时生产消费时候消费队列里面最多有几个元素的问题。本文来探讨另外一个问题,由于生产和消费线程执行的不确定性,会产生当生产线程t1时间投递任务到队列后,消费线程可能在t1+1左右时候才会开始消费其中的一个队列,也就是生产与消费之间会有1s时间的的间隔,那么有没有办法保证生产线程t1时间投

2018-01-31 09:52:27 289

原创 一个有关定时生产与消费的问题

一、前言本文来讲解遇到的一个有意思的与定时器相关的生产消费模型,模型如下图:image.png生产者是一个定时器线程,使用ScheduledThreadPoolExecutor的scheduleAtFixedRate控制每间隔3s投递一个元素到队列1,2,3(使用offer方法)。比如第1s放入一个元素到队列1,2,3,这时候每个队列

2018-01-31 09:51:51 400

原创 Springboot之spring-boot模块

一、前言spring-boot模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下:SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)一流的外部配置的支持(application.properties

2018-01-29 12:35:04 605

原创 Springboot之spring-boot-autoconfigure模块

一、前言Spring的出现给我们管理bean的依赖注入提供了便捷,但是当我们需要使用通过pom引入的jar里面的一个bean时候,还是需要手动在xml配置文件里面主要注入的bean 。springboot则可以依据classpath里面的依赖内容来自动配置bean到IOC容器,Auto-configuration会尝试推断哪些beans是用户可能会需要的。比如如果HSQLDB包在当前c

2018-01-29 12:34:24 7630

原创 SpringBoot之spring-boot-load模块

一、前言正常情况下classloader只能找到jar里面当前目录或者文件类里面的*.class文件。为了能够加载嵌套jar里面的资源之前都是把嵌套jar里面的class文件和应用的class文件打包为一个jar,这样就不存在嵌套jar了,但是这样做就不能很清晰的知道应用到底依赖了哪些东西,哪些是应用自己的,另外多个jar里面的class可能内容不一样但是文件名却一样。springbo

2018-01-29 12:33:40 3656

原创 Springboot模块分类

1.1、 spring-boot模块该模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下。SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)给web应用提供了一个可选的web容器(目前有Tomcat

2018-01-29 12:31:59 1412 1

原创 Java中调度线程池ScheduledThreadPoolExecutor原理探究

一、 前言前面讲解过Java中线程池ThreadPoolExecutor原理探究,ThreadPoolExecutor是Executors中一部分功能,下面来介绍另外一部分功能也就是ScheduledThreadPoolExecutor的实现,后者是一个可以在一定延迟时候或者定时进行任务调度的线程池。阿里巴巴长期招聘Java研发工程师p6,p7,p8等上不封顶级别,有意向的可以发简

2018-01-27 12:15:54 288

原创 Java中线程池ThreadPoolExecutor原理探究

一、 前言线程池主要解决两个问题:一方面当执行大量异步任务时候线程池能够提供较好的性能,,这是因为使用线程池可以使每个任务的调用开销减少(因为线程池线程是可以复用的)。另一方面线程池提供了一种资源限制和管理的手段,比如当执行一系列任务时候对线程的管理,每个ThreadPoolExecutor也保留了一些基本的统计数据,比如当前线程池完成的任务数目。另外,线程池提供许多可调参数和可扩

2018-01-27 12:15:18 289

原创 并发队列-无界阻塞延迟队列DelayQueue原理探究

一、前言DelayQueue队列中每个元素都有个过期时间,并且队列是个优先级队列,当从队列获取元素时候,只有过期元素才会出队列。阿里巴巴长期招聘Java研发工程师p6,p7,p8等上不封顶级别,有意向的可以发简历给我,注明想去的部门和工作地点:1064454834@qq.com二、 DelayQueue类图结构image.png如

2018-01-27 12:14:36 870

原创 并发队列中迭代器弱一致性原理探究

一、前言并发队列里面的Iterators是弱一致性的,next返回的是队列某一个时间点或者创建迭代器时候的状态的反映。当创建迭代器后,其他线程删除了该元素时候并不会抛出java.util.ConcurrentModificationException异常,能够保持创建迭代器后的元素一定被正确的next出来。阿里巴巴长期招聘Java研发工程师p6,p7,p8等上不封顶级别,有意向的可

2018-01-27 12:13:49 931 1

原创 并发队列-无界阻塞优先级队列PriorityBlockingQueue原理探究

一、 前言PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现,研究过数组方式存放最小堆节点的都知道,直接遍历队列元素是无序的。阿里巴巴长期招聘Java研发工程师p6,p7,p8等上不封顶级别,有意向的可以发简历给我,注明想去的部门和工作地点:1064454834@qq.com二、 PriorityBlocking

2018-01-27 12:12:57 291

原创 并发队列-有界阻塞队列ArrayBlockingQueue原理探究

一、 前言上节介绍了无界链表方式的阻塞队列LinkedBlockingQueue,本节来研究下有界使用数组方式实现的阻塞队列ArrayBlockingQueue阿里巴巴长期招聘Java研发工程师p6,p7,p8等上不封顶级别,有意向的可以发简历给我,注明想去的部门和工作地点:1064454834@qq.com二、 ArrayBlockingQueue类图结构

2018-01-27 12:12:16 325

原创 并发队列-无界阻塞队列LinkedBlockingQueue原理探究

一、前言前面介绍了使用CAS实现的非阻塞队列ConcurrentLinkedQueue,下面就来介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现二、 LinkedBlockingQueue类图结构image.png如图LinkedBlockingQueue中也有两个Node分别用来存放首尾节点,并且里面有个初始值

2018-01-27 12:11:30 288

原创 并发队列-无界非阻塞队列ConcurrentLinkedQueue原理探究

一、 前言常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentLinkedQueue是如何使用CAS实现的。二、 ConcurrentLinkedQueue类图结构image.png如图ConcurrentLinkedQu

2018-01-27 12:10:45 383

原创 一个有关定时生产与消费的问题

一、前言本文来讲解遇到的一个有意思的与定时器相关的生产消费模型,模型如下图:image.png生产者是一个定时器线程,使用ScheduledThreadPoolExecutor的scheduleAtFixedRate控制每间隔3s投递一个元素到队列1,2,3(使用offer方法)。比如第1s放入一个元素到队列1,2,3,这时候每个队列里面

2018-01-27 12:09:09 287

原创 受限访问量问题中锁的使用

一、 前言最近在做网上法庭的一个比较有意思的小需求,就是通过扫二维码方式允许最多30个人同时进入庭审,但是不限制进入的是是不是庭审人员,也就是说只要扫了这个二维码并且当前案件对应的参与人数不到30那么就可以进入,始终维持一个庭审案件里面最多有30人。二、 方案研究扫描二维码会调用后台的一个rpc,而Rpc会调用bo方法进行处理,那么下面就研究下bo里面里面怎么做。由

2018-01-25 12:25:37 269

原创 什么是重排序问题

十七、 什么是重排序问题Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序可以保证最终执行的结果是与程序顺序执行的结果一致,并且只会对不存在数据依赖性的指令进行重排序,这个重排序在单线程下对最终执行结果是没有影响的,但是在多线程下就会存在问题。一个例子int a = 1;(1)int b = 2;(2)int c= a + b;(3)如上c的值依赖a和b的值,所以重排序后能够

2018-01-19 09:40:52 1422 1

原创 FutureTask 原理

二十、FutureTask 原理20.1 一个例子 static class Task implements CallableInteger> { @Override public Integer call() throws Exception { System.out.println("子线程在进行计算");

2018-01-19 09:40:04 438

原创 高并发编程必备基础

一、前言借用Java并发编程实践中的话”编写正确的程序并不容易,而编写正常的并发程序就更难了”,相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,本文算是对多线程情况下同步策略的一个简单介绍。二、 什么是线程安全问题线程安全问题是指当多个线程同时读写一个状态变量,并且没有任何同步措施时候,导致脏数据或者其他不可预见的结

2018-01-19 09:38:49 887 1

原创 JDK8并发包新增StampedLock锁

4.8 JDK8新增的StampedLock锁探究StampedLock是并发包里面jdk8版本新增的一个锁,该锁提供了三种模式的读写控制,三种模式分别如下:写锁writeLock,是个排它锁或者叫独占锁,同时只有一个线程可以获取该锁,当一个线程获取该锁后,其它请求的线程必须等待,当目前没有线程持有读锁或者写锁的时候才可以获取到该锁,请求该锁成功后会返回一个stamp票据变量用来表

2018-01-17 09:40:31 373

原创 JDK8中新增原子性操作类LongAccumulator

一、 LongAccumulator类原理探究LongAdder类是LongAccumulator的一个特例,LongAccumulator提供了比LongAdder更强大的功能,如下构造函数其中accumulatorFunction一个双目运算器接口,根据输入的两个参数返回一个计算值,identity则是LongAccumulator累加器的初始值。 public LongAc

2018-01-16 12:50:19 1188

原创 JDK8中新增原子性操作类LongAdder

LongAdder简单介绍LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLong已经通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足,因为在非常高的并发请求下AtomicLong的性能不能让他们接受,虽然AtomicLong使用CAS但是CAS失败后还是通过无限循环的自旋锁不断尝试的 pu

2018-01-16 12:49:46 1579

原创 java中守护线程与用户线程

Java线程分为两类分别为daemon线程(守护线程)和User线程(用户线程),在JVM启动时候会调用main函数,main函数所在的线程是一个用户线程,这个是我们可以看到的线程,其实JVM内部同时还启动了好多守护线程,比如垃圾回收线程。那么守护线程和用户线程有什么区别那?区别之一是当最后一个非守护线程结束时候,JVM会正常退出,而不管当前是否有守护线程,也就是说守护线程是否结束并不影响JVM的

2018-01-16 12:48:24 885

原创 线程池使用FutureTask时候需要注意的一点事

8.4 线程池使用FutureTask时候需要注意的一点事线程池使用FutureTask的时候如果拒绝策略设置为了 DiscardPolicy和DiscardOldestPolicy并且在被拒绝的任务的Future对象上调用无参get方法那么调用线程会一直被阻塞。问题复现下面就通过一个简单的例子来复现问题:public class FutureTest {

2018-01-16 12:45:57 5716

原创 线程不安全的SimpleDateFormat

8.5 SimpleDateFormat是线程不安全的SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析或者格式化会导致程序出错,本节就讨论下它为何是线程不安全的,以及如何避免。问题复现为了复现该问题,编写如下代码: pub

2018-01-16 12:45:06 235

原创 伪共享

2.2.9 伪共享2.2.9.1什么是伪共享计算机系统中为了解决主内存与CPU运行速度的差距,在CPU与主内存之间添加了一级或者多级高速缓冲存储器(Cache),这个Cache一般是集成到CPU内部的,所以也叫 CPU Cache,如下图是两级cache结构:image.pngCache内部是按行存储的,其中每一行称为一个cache行,c

2018-01-16 12:44:11 513

原创 并发包中ThreadLocalRandom类原理剖析

2.2、 并发包中ThreadLocalRandom类原理剖析ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。本节首先讲解下Random类的实现原理已经它在多线程下使用的局限性,然后引入ThreadLocalRandom类,通过讲解ThreadLocalRan

2018-01-16 12:43:28 675

原创 ThreadLocal原理探究

2.1.11 ThreadLocal多线程访问同一个共享变量特别容易出现并发问题,特别是多个线程需要对一个共享变量进行写入时候,为了保证线程安全,一般需要使用者在访问共享变量的时候进行适当的同步,如下图:image.pngimage.png2.1.11.1 ThreadLocal使用实例本节来看下T

2018-01-16 12:40:42 312

原创 Springboot模块分类

1.1、 spring-boot模块该模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下。SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)给web应用提供了一个可选的web容器(目前有Tomcat

2018-01-16 12:39:53 1361

原创 使用ThreadLocal不当可能会导致内存泄露

8.2 使用ThreadLocal不当可能会导致内存泄露基础篇已经讲解了ThreadLocal的原理,本节着重来讲解下使用ThreadLocal会导致内存泄露的原因,并讲解使用ThreadLocal导致内存泄露的案例。8.2.1 为何会出现内存泄露基础篇我们讲到了ThreadLocal只是一个工具类,具体存放变量的是在线程的threadLocals变量里面,threadLo

2018-01-15 18:27:58 17327 8

原创 子线程优雅调用父线程RequestScope作用域Bean问题的探究

一、前言最近我们组在做项目分层模块化项目调研,就产生一个问题如何在开启的线程中不破坏使用习惯情况下使用请求线程里面的RequestScope作用域的bean,感觉这个问题比较有意思就研究并整理下一下,以便备忘,下面从最基础知识将起,一步步引入问题和解决方法二、ThreadLocal原理众所周知如果一个变量定义为了threadlocal变量,那么访问这个变量的每个线程都独有一个属于自

2018-01-14 17:36:36 1079

原创 Spring事务配置解惑

一、项目中spring+mybaits xml配置解析一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能会遇到坑,所以下面对这些配置项进行一一解说(1)配置数据源 "dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-m

2018-01-14 09:55:02 894

原创 常用开源框架中设计模式使用分析

一、前言说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者可以简化代码,或者可以是代码逻辑开起来清晰,或者对功能扩展很方便...。设计模式按照使用场景可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patter...

2018-01-13 23:33:39 1868

99 bottles of oop

面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。

2023-01-21

ppt to word ppt转word ppt截图 mfc 源码

用mfc实现的ppt转换为word的源代码,程序给你三种转换选择,第一种:整张ppt,第二中:一个框框为单位,第三制转换字体,另外还可以打开ppt进行截图。

2013-03-16

音乐播放器

用mfc开发的音乐播放器,可以快进,后退,单曲循环,顺序,随机播放,后台有access做数据保存音乐列表,实现了桌面歌词功能。实现了换肤功能

2013-03-16

空空如也

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

TA关注的人

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