7 传说中的靖哥哥

尚未进行身份认证

我要认证

小小程序员一枚

等级
TA的排名 6w+

AIO:简单代码示例

AIO目前使用并不多,只做代码示例...服务端代码package com.self.netty.aio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousChannelGroup;...

2020-01-03 17:38:22

NIO(五):源码分析_Select部分

之前已经对register源码进行了分析,注册已经是NIO的核心代码,而Select部分更是重中之重 注册时注册Socket句柄到内存对象中 select()时构造多道线程取对应区间的Socket句柄,线程在处理过程中分为协调线程和工作线程,注意其中协调获取的关系 添加有效的Socket句柄到SelectionKey列表中,通过selectKeys()可以直接获取到,进行后续事件处理 ...

2020-01-03 17:36:05

NIO(四):源码分析_Register部分

注册,就是将当前Channel注册到Selector上,是NIO源码的核心部分1,Channel.register()部分serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT):注册事件public final SelectionKey register(Selector sel, int ops, Object at...

2020-01-03 17:34:34

NIO(三):源码分析_初始化部分

1,ServerSocketChannel初始化1.1,ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()ServerSocketChannel.open()public static ServerSocketChannel open() throws IOException { // 先获取...

2020-01-03 17:33:53

NIO(二):NIO三大核心概念

1,Buffer缓冲区缓冲区本质上就是一个可以读写数据的内存块,底层数据结构是数组,通过一组属性和方法来实现缓冲区数据的读、写及读写转换1.1,Buffer基本类体系结构对于Java基本数据类型,除过 Boolean 外,每一种基本类型的包装类,都存在一种 Buffer 缓冲区与之对应 对于Java对象,可以转换为 Byte 字节,通过 ByteBuffer 进行数据传递 每一种...

2020-01-03 17:30:19

NIO(一):从一个简单的NIO示例开始

1,NIO和BIO比较 BIO以流的方法处理数据,而NIO以块的方式处理数据;效率提升很多 BIO是阻塞的,NIO是非阻塞的 BIO基于字节流和字符流进行操作,NIO基于Buffer缓冲区和Channel通道进行操作,基于Selector选择器监听通道中的时间,可以使用单线程监听多个通道数据 2,NIO三大核心概念缓冲区(Buffer) 通道(Channel...

2020-01-03 17:29:19

并发编程(十六):线程池

一,ThreadPoolExecutor 概述1,线程池优势 在Java中,如果每个请求到达就创建一个线程,创建线程和销毁线程对系统资源的消耗都非常大,甚至可能比实际业务处理消耗的资源都大。同时,如果在JVM中创建太多的线程,也可能由于过度消耗内存或调度切换从而导致系统资源不足。 为了解决上面提出的问题,就有了线程池的概念。线程池,就是在一个线程容器中提前放置一定量的初始化...

2019-10-08 00:07:05

并发编程(十五):原子操作之AtomicInteger

一,Atomic 概述1,原子类 * JUC中提供了一系列原子类,通过CAS在多线程环境下来保证原子操作,此处只对 AtomicInteger进行简单分析2,常用API * 同时,Atomic类提供了一系列API来保障原子操作,但是殊途同归,底层都是通过CAS来实现,只是提供了更多的功能而已,此处仅列出部分。可以看到涉及常规的数据变更3,功能DEMO ...

2019-10-08 00:03:05

并发编程(十四):阻塞队列之LinkedBlockingQueue

一,关联源码链接 *并发编程(四):AbstractQueuedSynchronizer源码分析 *并发编程(五):AQS之重入锁ReentrantLock *并发编程(七):AQS之Condition二,LinkedBlockingQueue 概述1,LinkedBlockingQueue LinkedBlockingQueue 底层通过链表...

2019-10-07 23:58:24

并发编程(十三):阻塞队列之ArrayBlockingQueue

一,关联源码链接 *并发编程(四):AbstractQueuedSynchronizer源码分析 *并发编程(五):AQS之重入锁ReentrantLock *并发编程(七):AQS之Condition二,ArrayBlockingQueue 概述1,ArrayBlockingQueue ArrayBlockingQueue 是通过数组实现的FI...

2019-10-07 23:57:51

并发编程(十二):ConcurrentHashMap源码分析

一,ConcurrentHashMap概述1,ConcurrentHashMap * ConcurrentHashMap 和 HashMap 原理基本一致,就是在 HashMap 的基础上增加了锁处理,支持并发操作,在实现上比 HashMap 更复杂点。先比较与 JDK7,JDK8在实现上,修改原来通过 Segment 进行加锁的方式改为通过 Node 进行加锁,同时在链表方面,如果...

2019-10-07 23:56:43

并发编程(十一):ThreadLocal源码分析

一,ThreadLocal概述1,TheadLocal —— 线程隔离对象 * JDK内部提供了线程隔离对象 ThreadLocal ,注意该类与AQS或者JUC基本没有关系。线程对 ThreadLocal 操作,实际上对线程属性 threadLocals 进行操作,该属性是 ThreadLocal 内部类 ThreadLocalMap 的实例。ThreadLocal 底层通过 Th...

2019-10-07 23:56:10

并发编程(十):AQS之CyclicBarrier

一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,CyclicBarrier介绍 1,线程处理 * CyclicBarrier 的字面意思就是循环屏障。在一组线程到达循环屏障时阻塞,直到最后一个线程到达屏障时,屏障才会放开,让所有线程执行。该类可以与 CountDownLatch进行类比,功能基本一致。不同点在...

2019-10-07 23:55:13

并发编程(九):AQS之Semaphore

一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,Semaphore介绍 1,线程访问控制 Semaphore 也就是我们常说的信号灯,通过初始化的信号量控制同时访问线程的个数。在线程调用 acquire() 方法时,会获取到一个许可,作为通行证继续进行线程执行,等线程执行完成后,通过调用 release() 方...

2019-10-07 23:54:40

并发编程(八):AQS之CountDownLatch

一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,CountDownLatch介绍 1,线程控制 * CountDownLatch 是一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作执行完毕再执行。从命令可以解读 CountDown 是倒数的意思,类似于倒计时的概念。在API层面,CountDow...

2019-10-07 23:54:09

并发编程(七):AQS之Condition

一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,Condition介绍 1,线程通信 * 在synchronized 中,有分析过通过 wait()/notify()/notifyAll()实现线程通信。同样,在JUC中,也提供了这样的工具类,就是Conditon 2,类图 ...

2019-10-07 23:53:11

并发编程(六):AQS之读写锁ReentrantReadWriteLock

一,AQS源码博文:并发编程:AbstractQueuedSynchronizer源码分析二,ReentrantReadWriteLock读写锁介绍1,读写锁介绍 ReentrantReadWriteLock 虽然与 ReentrantLock 没有直接关系,但是在功能上算是对 ReentrantLock 的扩展。在 ReentrantLock 重入独占锁的功能上,添加了共享锁...

2019-10-07 23:52:24

并发编程(五):AQS之重入锁ReentrantLock

一,AQS源码博文:并发编程:AbstractQueuedSynchronizer源码分析二,ReentrantLock重入锁基本介绍 1,类图 * 从图中可以看到,ReentrantLock是顶层锁接口Lock的实现类,并实现了Lock所定义的关于锁操作的基本API * ReentrantLock内部定义了三个有继承关系的内部类,Sync,F...

2019-10-06 17:18:43

并发编程(四):AbstractQueuedSynchronizer源码分析

一,AQS 1,AQS是JUC的核心功能组件,主要通过FIFO双向链表特性对进行park()和unpark()操作来实现线程阻塞和线程唤醒。AQS主要提供了两种功能,独占和共享。 * 独占锁:独占锁,每次只能有一个线程持有锁,比如ReentrantLock 就是以独占方式实现的互斥锁 * 共享锁:允许多个线程同时持有锁,并发访问共享资源...

2019-09-29 21:17:05

并发编程(三):Volatile关键字

一,一段代码引发可见性思考 1,代码片段:从代码可以看出,子线程会一直在循环中阻塞,当主线程已经修改flag的值为true后,子线程并没有对flag值做同步修改。当给flag加上volatile关键字修饰后,则子线程会获取到最新的flag值,并打印出结果(不做演示)package com.gupao;/** * @author pj_zhang * @create 2019...

2019-09-26 21:00:59

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。