自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Java网络编程--Netty中的责任链

Netty中的责任链设计模式 - 责任链模式责任链模式(Chain of Responsibility Pattern)是一种是行为型设计模式,它为请求创建了一个处理对象的链。其链中每一个节点都看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。责任链模...

2019-09-26 20:55:00 241

转载 Java网络编程 -- Netty入门

Netty简介Netty是一个高性能,高可扩展性的异步事件驱动的网络应用程序框架,它极大的简化了TCP和UDP客户端和服务器端网络开发。它是一个NIO框架,对Java NIO进行了良好的封装。作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。Netty的特性...

2019-09-10 21:45:00 244

转载 Reactor模式

什么是Reactor模式Reactor模式是一种设计模式,它是基于事件驱动的,可以并发的处理多个服务请求,当请求抵达后,依据多路复用策略,同步的派发这些请求至相关的请求处理程序。Reactor模式角色构成在早先的论文An Object Behavioral Pattern forDemultiplexing and Dispatching Handles for Sync...

2019-09-08 09:59:00 373

转载 Java网络编程 -- AIO异步网络编程

AIO中的A即Asynchronous,AIO即异步IO。它是异步非阻塞的,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般我们的业务处理逻辑会变成一个回调函数,等待IO操作完成后,由系统自动触发。在进行读写操作时,只需直接调用API的read/write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方...

2019-08-28 21:18:00 269

转载 Java网络编程 -- NIO非阻塞网络编程

从Java1.4开始,为了替代Java IO和网络相关的API,提高程序的运行速度,Java提供了新的IO操作非阻塞的API即Java NIO。NIO中有三大核心组件:Buffer(缓冲区),Channel(通道),Selector(选择器)。NIO基于Channel(通道)和Buffer(缓冲区))进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中,而Selector...

2019-08-26 21:52:00 157

转载 Java网络编程 -- BIO 阻塞式网络编程

阻塞IO的含义阻塞(blocking)IO :阻塞是指结果返回之前,线程会被挂起,函数只有在得到结果之后(或超时)才会返回非阻塞(non-blocking)IO :非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回同步(synchronous)IO :应用阻塞在发送或接受数据的状态,直至数据成功传输(或返回失败),简单来说就是必须一件...

2019-08-22 20:15:00 192

转载 Java网络编程 -- 网络协议

OSI网络七层协议为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。OSI网络七层协议就是在这个基础上制定出来的,其从最底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。各层主要功能物理层:使原始的数据比特流能在物理介质上传输数据链路层:通过校验,确认和反馈重发等手段,形成稳定的...

2019-08-14 20:11:00 140

转载 自定义FutureTask实现

FutureTaskFutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果。通过get()方法来获取异步任务的结果,但是会阻塞当前线程直至异步任务执行结束。一旦任务执行结束,任务不能重新启动或取消,除非调用runAndReset()方法。代码示例:public class Thread...

2019-08-11 21:02:00 220

转载 JDK容器类List,Set,Queue源码解读

List,Set,Queue都是继承Collection接口的单列集合接口。List常用的实现主要有ArrayList,LinkedList,List中的数据是有序可重复的。Set常用的实现主要是HashSet,Set中的数据是无序不可重复的。Queue常用的实现主要有ArrayBlockingQueue,LinkedBlockingQueue,Queue是一个保持先进先出的顺序队列...

2019-08-05 20:21:00 142

转载 JDK容器类Map源码解读

java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类。Dictionary是JDK最初的键值对类,它不可以存储null作为key和value,目前这个类早已不被使用了。目前都是在使用Map接口,它是可以存储null值作为key和value,但Map的key是不可以重复的。...

2019-07-29 20:48:00 117

转载 深入理解Java中的锁(三)

ReadWriteLock接口读写锁维护一对关联锁,一个只用于读操作,一个只用于写操作。读锁可以由多个线程同时持有,又称共享锁。写锁同一时间只能由一个线程持有,又称互斥锁。同一时间,两把锁不能被不同线程持有。读写锁适合读取操作多于写入操作的场景,改进互斥锁的性能,比如集合的并发安全性改造,缓存组件等。ReentrantReadWriteLock实现原理分析Reentr...

2019-07-28 22:23:00 157

转载 深入理解Java中的锁(二)

locks包结构层次Lock 接口方法签名描述void lock();获取锁(不死不休)boolean tryLock();获取锁(浅尝辄止)boolean tryLock(long time, TimeUnit unit) throws InterruptedException;获取锁(过时不候)v...

2019-07-25 21:20:00 155

转载 深入理解Java中的锁(一)

Java中锁的概念自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环。乐观锁 : 假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改悲观锁 :假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁独享锁(写) : 给资源加上写...

2019-07-23 22:54:00 161

转载 线程安全之原子操作

原子操作原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。首先我们来看一个非原子操作的示例:public class Counter ...

2019-07-17 19:57:00 257

转载 Java内存模型以及线程安全的可见性问题

Java内存模型 VS JVM运行时数据区首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多介绍Java内存模型的文章描述的堆,方法区,Java虚拟机栈,本地方法栈,程序计数器这东西并不是Java内存模型的内容而是JVM运行时数据区的内容。要理解二者的区别就要了解《Java虚拟机规范》和《Java语言规范》。我们知道Java虚拟机上并不知只有Java语言,像J...

2019-07-15 20:43:00 102

转载 Java线程池的应用

为什么要用线程池线程是不是越多好?线程在Java中是一个对象, 更是操作系统的资源, 线程额创建和销毁都需要时间,如果 创建时间+销毁时间>执行任务时间 就很不合算Java对象占用堆内存,操作系统线程占用系统内存, 根据JVM规范,一个线程默认最大栈大小为1M, 这个栈空间是要从操作系统内存中分配的,线程过多会消耗很多的内存操作系统频繁切换线程上下文会影响性...

2019-07-12 20:43:00 132

转载 Java中实现线程的方式

Java中实现线程的方式Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行。Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口。两种方式都是去重写run()方法,在run()方法中去实现具体的业务代码。但这两种方式有一个共同的弊端,就是由于run()方...

2019-07-11 21:37:00 164

转载 线程通信

线程通信的方式要想实现线程之间的协同, 如: 线程先后执行顺序, 获取某个线程的执行结果等, 涉及线程之间的相互通信, 分为下面四类文件共享网络共享变量共享JDK提供的线程协调API 细分为: suspend/resume, wait/notify, park/unpark文件共享变量共享线程协作 - JDK API典型场景: 生产...

2019-07-10 20:51:00 120

转载 线程状态

线程状态6 个状态定义: java.lang.Thread.StateNew: 尚未启动的线程的线程状态Runnable: 可运行线程的线程状态, 等待CPU调度Blocked: 线程阻塞, 等待监视器锁定的线程状态Waiting: 等待线程的线程状态, 下列不带超时的方式: Object.wait, Thread.join, Lo...

2019-07-09 22:37:00 140

转载 CPU缓存和内存屏障

CPU性能优化手段 - 缓存为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能多级缓存L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kbL2 Cache (二级缓存) 由于...

2019-07-08 20:52:00 160

空空如也

空空如也

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

TA关注的人

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