自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一把空心菜

The night is young

  • 博客(17)
  • 收藏
  • 关注

原创 05.SpringMVC 请求处理 - FrameworkServlet

基本概念首先来看下 SpringMVC 中请求处理的大致流程:在 Servlet 中 service 方法负责请求处理。该方法在其子类 HttpServlet 中被重写。在 HttpServlet 中,通过区分不同的请求类型,而采取不同的动作,如 doGet 负责 GET 请求、doPost 负责 Post 请求等。这些方法在其子类 FrameworkServlet 中也被重写。在 Frame

2017-02-28 13:16:24 1354 2

原创 03.JUC 集合 - BlockingQueue

概念BlockingQueue,即阻塞队列。它是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景:生产者是往队列里添加元素的线程。消费者是从队列里拿元素的线程。操作阻塞队列提供了四种处理方法: 方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时

2017-02-23 22:37:55 293

原创 05.JUC 集合 - LinkedBlockingQueue

基本概念LinkedBlockingQueue 是一个用链表实现的有界阻塞队列。LinkedBlockingQueue 按照先进先出的原则对元素进行排序。LinkedBlockingQueue 采用了双锁、双条件队列来提高读写效率。内部构造LinkedBlockingQueue 内部维护着一个单向链表,且链表头节点的值永远为空。如下图所示:下面来看它的构成:Node ,节点static clas

2017-02-23 19:19:46 296

原创 04.JUC 集合 - ArrayBlockingQueue

基本概念ArrayBlockingQueue 是一个用数组实现的有界阻塞队列。此队列按照先进先出(FIFO)的原则对元素进行排序。默认情况下不保证访问者公平的访问队列,所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程,可以先从队列里获取元素。内部构造构造函数,ArrayBlockin

2017-02-23 19:19:01 345

原创 02.JUC 集合 - ConcurrentHashMap

基本概念ConcurrentHashMap 采用了分段锁的设计,只有在同一个分段内才存在竞态关系,不同的分段锁之间没有锁竞争。相比于对整个 Map 加锁的设计,分段锁大大的提高了高并发环境下的处理能力。内部构造ConcurrentHashMap 实际上是由多个 Segment(分段)组成, Segment 的内部结构与 HashMap 一样,都是由哈希表构成。因此也可以理解为由多个 “HashMap

2017-02-23 12:57:45 323

原创 01.JUC 集合 - CopyOnWriteArrayList

基本概念CopyOnWriteArrayList 的实现原理实际与 ArrayList 大同小异。它们内部都通过维护一个数组来对数据进行操作。不同的是它的处理写操作(包括 add、set、remove)是先将原始的数据通过Arrays.copyof 方法复制生成一份新的数组。然后在新的数据对象上进行写操作,写完后再将原来的引用指向到当前这个数据对象。这样保证了每次写都是在新的对象上。而 ArrayL

2017-02-23 11:41:23 311

原创 12.JUC 锁- CyclicBarrier

基本概念CyclicBarrier ,也称可重用屏障是一个线程同步工具,用于一组互相等待线程之间的协调,在到达某个临界点之前,这些线程必须互相等待。通俗来讲,表示 n 个线程,大家相互等待,只要有一个没完成,所有人都得等着。CyclicBarrier 还允许指定一个任务,在所有线程到达临界点时执行,由最后到达的线程执行此任务。调用方法假设有场比赛,需要 3 个选手才能比赛。若存在选手未到达,则必须等

2017-02-22 23:37:10 326

原创 11.JUC 锁 - Semaphore

基本概念Semaphore 即计数信号量,它本身维护着一组permit(许可)。它本质是共享锁,通过修改 permit 的值来调整可以被多少个线程同时持有。当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。acquire ,表示获取信号量的许可;调用该方法时,在没有可用的许可前线程将阻塞。release ,表示添加一个可用许可;调用该方法时,可以添加一个许可,即

2017-02-22 23:19:40 525

原创 10.JUC 锁- CountDownLatch

基本概念CountDownLatch 这个类能够使一个或多个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。调用方法假设有工人、老板两种角色。工人负责工作,老板负责检查工人已完成的工作。那么存在以下条件:老板必须等待工人完成工作后才能进行检查。工人public class Worker implements Runnab

2017-02-22 22:57:57 594

原创 09.JUC 锁 - ReentrantReadWriteLock

基本概念ReadWriteLock (读写锁)内部维护着两个锁,一个用于写操作,即写锁;一个用于读操作,即读锁。写锁,是独占锁,即只能被一个线程持有。读锁,是共享锁,即可以同时被多个线程持有。它的接口定义如下:public interface ReadWriteLock { Lock readLock(); Lock writeLock();}ReentrantReadWri

2017-02-22 22:12:06 694

原创 08.JUC 锁 - ReentrantLock

基本概念ReentrantLock,即可重入锁。可重入锁指的是在一个线程中可以多次获取同一把锁,比如:一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁。内部构造首先来看它的继承关系:在 ReentrantLock 有三个重要的内部类:// 同步器static abstract class Sync extends Abstrac

2017-02-22 20:55:00 452

原创 07.JUC 锁 - AQS - Condition

基本概念Condition ,即条件(也称为条件队列或条件变量)。它主要是为了在 JUC 框架中提供和 Java 传统的监视器风格的 wait、notify、notifyAll 方法类似的功能。Condition 自己也维护了一个队列,该队列的作用是维护一个等待 signal 信号的队列,两个队列的作用是不同,事实上,每个线程也仅仅会同时存在以上两个队列中的一个。将设有线程 1、2,下面来具体过程。

2017-02-22 20:47:21 1711

原创 06.JUC 锁 - AQS - 共享模式

基本概念AQS 的共享模式,表示 AQS 通过共享模式获取/释放锁。该类对应的方法为 acquireShared/acquireSharedInterruptibly/tryAcquireSharedNanos、 releaseShared。acquireSharedacquireShared 表示以共享模式获取锁对象,并忽略中断。public final void acquireShared(in

2017-02-22 16:44:03 629

原创 04.JUC 锁- AQS - CLH 队列

基本概念首先我们需要知道两个概念:AQS、CHL 队列。AQS:即 AbstractQueuedSynchronizer 类,它是整个 J.U.C 框架的核心所在。其中之一的功能就是将线程封装在一个节点里面,不同的节点通过连接形成了一个 CHL 队列。CHL 队列:它是一个非阻塞的 FIFO 队列,也就是说在并发条件下往此队列做插入或移除操作不会阻塞,它通过自旋锁和 CAS 保证节点插入和移除的

2017-02-22 15:53:58 1572

原创 02.JUC 锁 - CAS

基本概念CAS(compare and swap),即比较并交换。它在 J.U.C 包中被广泛使用。是一种对内存中的共享数据进行操作的指令,而且该操作是原子的读写操作。CAS 操作包含三个操作数:内存位置(V)、预期原值(A)以及新值(B)。它具有以下特点:当且仅当 A 和 V 相同,将 V 修改为 B ,否则什么都不做。锁机制在分析 CAS 的原理之前,先来介绍下 Java 的锁机制。常见的锁

2017-02-22 15:17:30 511

原创 03.JUC 锁 - LockSupport

基本概念LockSupport 可以用来实现线程的阻塞/唤醒。每个使用 LockSupport 的线程都会与一个许可关联:若该许可有效,则线程可以继续执行。若该许可无效,则线程进入阻塞,等待许可证生效后再继续执行。关于许可,可类比为停车场的车位:若车位是被占用(即不可用),想要停车(park)则必须等待车位空余出来。通过 unpark 把车位空出来(即可用),则就可以直接停车。关于 Lo

2017-02-13 09:27:08 303

原创 01.JUC 锁 - 概述

基本概念J.U.C 包是 java.util.concurrent 包的简写。这个包在JDK5引入,大大增强了Java的并发特性。JDK7还引入ForkJoin框架。在 JUC 中,并发离不开锁,因为锁,才能真正实现并发访问。锁的框架如下: ](https://static.oschina.net/uploads/img/201702/12215540_3JWz.png “在这里输入图片标题”)C

2017-02-12 22:03:13 501

空空如也

空空如也

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

TA关注的人

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