阻塞队列BlockingQueue之LinkedBlokingQueue
摘要:1、简介 LinkedBlokingQueue 是链表实现的有界阻塞队列,此队列的默认和最大长度为 Integer.MAX_VALUE。此队列按照先进先出的原则对元素进行排序。ArrayList和ArrayBlockingQueue一样,内部基于数组来存放元素,而LinkedBlockingQueu
阅读全文
阻塞队列BlockingQueue之ASynchronousQueue
摘要:一、SynchronousQueue简介 Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。 不像ArrayBlockingQueue或LinkedListBloc
阅读全文
阻塞队列BlockingQueue之ArrayBlockingQueue
摘要:ArrayBlockingQueue 是数组实现的有界阻塞队列,此队列按照先进先出(FIFO)的原则对元素进行排序。 构造方法: public ArrayBlockingQueue(int capacity) { this(capacity, false); } public ArrayBlocki
阅读全文
阻塞队列BlockingQueue
摘要:阻塞队列BlockingQueue是一个接口,基于ReentrantLock ,依据它的基本原理,我们可以实现Web中二段长连接聊天功能,当然其最常用的还是用于实现生产者和消费者模式: BlockingQueue接口提供了以下方法: package java.util.concurrent; imp
阅读全文
并发之ATOMIC原子操作--Unsafe解析(三)
摘要:Atomic 类的原子操作是依赖java中的魔法类sun.misc.Unsafe来实现的,而这个类为我们提供了访问底层的机制,这种机制仅供java核心类库使用,而不应该被普通用户使用。 获取Unsafe的实例 查看Unsafe的源码我们会发现它提供了一个getUnsafe()的静态方法。 @Call
阅读全文
并发之ATOMIC原子操作--CAS乐观锁原理(二)
摘要:1.乐观锁介绍 程序完成并发操作时,访问数据时每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。就是当去做某个修改或其他操作的时候它认为不会有其他线程来做同样的操作(竞争),这是一种乐观的态度,通常是基于CAS 原子指令来实现的。 2.CAS介绍 当多个线程尝试使用CAS
阅读全文
并发之atomic原子操作(一)
摘要:Atomic类 Atomic类是一个简单的高效的、线程安全的递增递减方案,在多线程或者并发环境中,我们常常会遇到这种情况 int i=0; i++ 稍有经验的同学都知道这种写法是线程不安全的。为了达到线程安全的目的,我们通常会用synchronized来修饰对应的代码块。现在我们有了新的方法,就是使
阅读全文
并发编程之CyclicBarrier
摘要:栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。 CyclicBarrier可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用await方法,这个方法将阻塞直到所
阅读全文
并发编程Semaphore详解
摘要:Semaphore的作用:限制线程并发的数量 位于 java.util.concurrent 下, 构造方法 // 构造函数 代表同一时间,最多允许permits执行acquire() 和release() 之间的代码。 public Semaphore(int permits) { sync =
阅读全文
设计模式之行为型模式(四)
摘要:行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低
阅读全文
关于反射与自定义注解的一些使用
摘要:对实体类的属性进行校验,等处理。 自定义注解 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import
阅读全文
设计模式之结构型模式(三)
摘要:结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种: 代
阅读全文
设计模式之创建型模式(二)
摘要:创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。 1、单例(Singleton)模式 1) 指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中
阅读全文
设计模式(一)
摘要:概念 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一
阅读全文
Eclipse代码规范
摘要:配置代码自动格式化 1、导入规范文件 codeStyle.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <profiles version="12"> <profile kind="CodeFormatterProfile" n
阅读全文
并发之CountDownLatch用法详解
摘要:概念 CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后执行。 CountDownlatch 原理 通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成
阅读全文
字节码长度
摘要:字节是指一小组相邻的二进制数码。通常是8位作为一个字节。它是构成信息的一个小单位,并作为一个整体来参加操作,比字小,是构成字的单位。 在微型计算机中,通常用多少字节来表示存储器的存储容量。 编码不同,占的字节不同。 ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空
阅读全文
AbstractQueuedSynchronizer(AQS) 超详细原理解析
摘要:java.util.concurrent包中很多类都依赖于这个类AbstractQueuedSynchronizer所提供的队列式的同步器,比如说常用的ReentranLock,Semaphore和CountDownLatch等. 为了方便理解,我们以一段使用ReentranLock的代码为例,讲解
阅读全文
synchronized(三) 锁的膨胀过程(锁的升级过程)深入剖析
摘要:锁为何存在: 因为在并发情况为了保证线程的安全性,是在一个多线程环境下正确性的概念,也就是保证多线程环境下共享的、可修改的状态的正确性(这里的状态指的是程序里的数据),在java程序中我们可以使用synchronized关键字来对程序进行加锁。 当声明synchronized代码块的时候,编译成的字
阅读全文
synchronized锁机制的实现原理
摘要:Synchronized 锁机制的实现原理 Synchronized是Java种用于进行同步的关键字,synchronized的底层使用的是锁机制实现的同步。在Java中的每一个对象都可以作为锁。 Java中synchronized的两个特性: 互斥性:即在同一时间内只允许同一个县城持有某一个对象锁
阅读全文
happen-before原则
摘要:单线程happen-before原则: 在同一个线程中,书写在前面的操作happen-before后面的操作。 锁的happen-before原则: 同一个锁的unlock操作happen-before此锁的lock操作。 volatile的happen-before原则: 对一个volatile变
阅读全文
mysql的锁
摘要:mysql的锁分为 Lock 和 Latch . Latch 一般称为 闩锁 ,因为其要求锁定的时间必须非常短。若持续的时间长,则应用的性能会非常差,在 InnoDB引擎中,Latch又可以分为mutex(互斥量)和 rwlock(读写锁)。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有
阅读全文
JVM系列(四)之GC调优
摘要:JVM内存参数调优 为什么要GC调优? 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但当你的系统时常报了内存溢出或者java程序运行缓慢时,优先排查是否是程序导致的内存泄漏,再看你是否需要JVM参数调优。 想一下进行
阅读全文
JVM系列(三)之GC
摘要:什么是GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清
阅读全文
JVM系列(二)之类加载
摘要:什么是类的加载 类加载是指将源代码编译后的.class加载到内存中初始化待程序使用的过程,类加载的最终结果就是将.class字节码加载到JVM中生成一个java.lang.Class对象,提供给程序使用的访问入口。 类加载的过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:
阅读全文