自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring之BeanFactory和ApplicationContext的关系

Spring之BeanFactory和ApplicationContext的关系 学过Spring的小伙伴都知道应该对BeanFactory和ApplicationContext这两个接口都不陌生吧,它们之间有什么关系呢?下面我们就来探讨一下.首先,我们先来看一张类图:这是Spring一部分的关系类图,从这个类图我们可以大致看出BeanFactory的和ApplicationContext的关系,BeanFactory是ApplicationContext的基类,BeanFactory所拥有的功能

2020-06-10 17:44:09 414

原创 流式编程

函数式接口Java内置核心四个函数式接口Consumer< T > 1package com.atguigu.juc.MyFunction; 2 3import java.util.function.Consumer; 4 5public class FunctionDemo { 6    ...

2020-02-19 18:20:04 236 1

原创 线程池

为什么要用线程池例子:10年前单核CPU电脑,假的多线程,像马戏团小丑玩多个球,CPU需要来回切换.现在是多核电脑,多个线程各自跑在独立的CPU上,不用切换效率高.线程池的优势线程池做的工作主要是控制运行的线程数量,处理过程中将任务放到队列中,然后在线程创建后启动这些任务,如果线程池超过最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行.特点线程复用;控制最...

2020-02-18 20:25:03 160

原创 阻塞队列

阻塞队列何为阻塞队列何为阻塞队列?阻塞队列是一个队列,数据结构如下图所示:线程1往队列里面添加元素,线程2从队列里面移除元素当队列为空时,从队列中获取元素的操作将会阻塞当队列是满时,从队列中添加元素的操作将会被阻塞试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列中添加元素试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,...

2020-02-17 17:34:50 101

原创 Semaphore的使用

我们在多线程的使用过程中,可能有多个线程抢占有限个资源的需求,比如多辆车抢占车位的例子构造器Semaphore(int permits)Semaphore原理在信号量上我们定义两种操作:1.acquire(获取):当一个线程调用acquire操作是,它要么通过成功获取信号量(信号量减1),要么一直等待下去,知道有线程释放信号量,或超时2.release(释放):实际上会将信号量的...

2020-02-17 15:39:49 94

原创 CyclicBarrier的使用

我们在使用多线程的过程中,我们可能有开启固定个线程后触发另一个线程的启动的需求,比如我们开会需要所有人都到齐了才能进行.构造方法CyclicBarrier(int parties, Runnable barrierAction)CyclicBarrier(int parties)CyclicBarrier原理CyclicBarrier主要有一个方法, 当一个多线程调用await方...

2020-02-15 18:02:20 84

原创 CountDownLatch的使用

我们在使用多线程的过程中,可能有需要阻塞主线程让子线程先运行的需求,此时我们需要使用CountDownLatch这个类进行线程运行的控制传统案例 1package com.atguigu.juc.MyLock; 2 3 4public class CountDownLatchDemo { 5    pub...

2020-02-15 16:22:49 62

原创 开启多线程的三种方式

继承Thread接口 1package com.atguigu.juc.MyLock; 2 3public class ThreadDemo { 4    public static void main(String[] args) { 5  &n...

2020-02-15 16:09:06 294

原创 多线程顺序调度

我们知道,线程的等待/通知机制会随机唤醒一个正在等待的线程或者全部唤醒,无法控制线程的顺序调度. wait/notify(notifyAll)无法控制线程的调度顺序,但是如果我们利用好await/single(singleAll)的话,可以实现线程的顺序调度我们下面以一个需求来学习如何用await/single(singleAll)来实现线程的顺序调度需求:同时启动三个线程,并且A线程...

2020-02-13 15:52:34 334

原创 通知/等待机制

通知/等待机制有两种实现方式,一种是wait/notify(notifyAll),一种是await/signal(signalAll)下面我们对这两种方式进行展开wait/notify(notifyAll)字段解释wait等待notify随机唤醒一个等待线程notifyAll唤醒所有等待线程注意:wait/notify(notifyAll...

2020-02-13 08:05:20 108

原创 Lambda表达式

传统接口访问 1package com.atguigu.juc.lambda; 2 3public class lambdademo { 4    public static void main(String[] args) { 5  &nbsp...

2020-02-12 17:18:39 77

原创 公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁

公平锁和非公平锁 在并发包ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或非公平锁,默认是非公平锁1    public ReentrantLock(boolean fair) {2        syn...

2020-02-08 17:17:28 133

原创 我们知道ArrayList是线程不安全的,请编写一个不安全的案例并给出解决方案

案例代码 1package com.atguigu.unit1.unit2; 2 3import java.util.ArrayList; 4import java.util.Collections; 5import java.util.List; 6import java.util.UUID; 7 8public class&nbs...

2020-02-06 17:44:46 285

原创 归并排序

归并排序使用了归并的思想,使用的分治的策略,先把原来的数组分解为小数组,最后再慢慢将小数组合并为大数组。归并排序的思想图解分 1    public static void mergeSort(int[] arr) { 2     &nbsp...

2020-01-17 17:26:08 143

原创 递归行为的时间复杂度估计

平时我们写得算法可以用for循环来得出算法的时间复杂度,那么大家有没有想过递归的时间复杂度呢?是不是递归的时间复杂度算不了呢?不是的,递归行为的时间复杂度可以用master公式进行估算master公式T(N) = a*T(N/b) + O(N^d)公式解释:b :样本被分为几个部分a :总体相当与一个部分样本发生多少次O(N^d) :除了递归之外的其他时间复杂度,比如for循环复杂...

2020-01-16 12:41:35 226

原创 对数器

我们在学习数据结构的过程中可能会遇到这样的一个问题:当我们写一个排序算法的时候,可能数据样本小的时候我们的程序还是能够正常运行的,但是样本一大就会出各种报错,或者是排序错误。基于这些问题,对数器能够帮我们解决这些问题。下面我们来看看对数器是如何编写的,并且以冒泡排序进行测试###对数器所谓的对数器其实就是帮我们随机生成一个不定长和不定值的数组废话不多说,直接上代码 1package&...

2020-01-16 10:02:56 144

原创 NIO之MappedByteBuffer的使用

NIO提供了MappedByteBuffer,可以让文件直接在内存(堆外内存)中进行修改,而如何同步到文件由NIO来完成。下面我们来看看一个例子先创建一个文件1.txt,里面的内容为hello world1hello word!编写一个程序对文件内容进行修改public abstract MappedByteBuffer map(MapMode mode, long po...

2020-01-15 10:50:56 237

原创 Netty学习之I/O模型

I/O模型的基本说明I/O模型的简单理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java共支持3种网络编程模型/IO模式:BIO、NIO、AIOJava BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 Java NIO : 同步...

2020-01-14 19:48:11 124

原创 NIO之选择器

阻塞与非阻塞阻塞/非阻塞关注的是程序在调用结果时的状态阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。我们所学的传统IO是阻塞式的,NIO中提供了非阻塞式的用法,是通过选择器(Selector)监听通道实现的。下面我们会以NIO编写一个阻塞式和非阻塞式的网络通信阻塞式网络通信废话不多说,...

2020-01-13 09:29:14 132

原创 NIO之分散与聚集

分散和聚集的理解分散读取是指从Channel中读取的数据“分散”到多个buffer中注:按照缓冲区的顺序,从Channel中读取的数据依次将buffer填满代码实现如下 1    @Test 2    public void test5() throws Exceptio...

2020-01-12 19:31:49 265

原创 NIO之通道

通道的理解通道是由java.nio.channels包定义的。Channel表示IO源与目标打开的连接。Channel类似于传统的“流”。只不过Channel本身不能直接访问数据,Channel只能与buffer进行交互。通道的主要实现类类解析FileChannel本机IO,用于本地文件传输SocketChannel网络IO,使用TCp协议ServerSo...

2020-01-12 18:44:26 186

原创 NIO之直接缓冲区与非直接缓冲区

直接缓冲区与非直接缓冲区直接缓冲区与非直接缓冲区的理解字节缓冲区要么是直接的,要么是非直接的。如果为直接字节缓冲区,则」ava虛拟机会尽最大努力直接在此缓冲区上执行本机/o操作。也就是说,在每次调用基础操作系统的一个本机/o操作之前(或之后),虛拟机都会尽量避免将缓冲区的内容复制到中间缓冲区中(或从中间缓冲区中复制内容)。直接字节缓冲区可以通过调用此类的 allocate Direct()...

2020-01-12 15:16:53 114

原创 NIO之简单入门

在学习Java的过程中,相信大家都有学过IO流吧?那NIO大家有没有了解呢?今天我们就来看看强大的NIO。对比IO流,看看哪个更加强大。NIO与IO的主要区别废话不多说,我们来看一张表面向流面向流的数据传输是在管道建立连接后单向进行数据传输,在我们学习Java的时候InputStream和OutputStream就是对应输入流和输出流,它们的传输方向是单向的。面向缓冲区面向缓...

2020-01-12 11:07:07 81

原创 Mysql之EXPLAIN关键字学习笔记

Mysql的增删改查我想学过Mysql的人都知道怎么用吧!但是作为一个后端开发人员,只会CRUD是往往不够的,我们在CRUD的同时也需要掌握一些数据库性能优化,这样我们才能提高我们系统的性能。今天介绍EXPLAIN字段,这个字段可以让我们很清楚地了解Mysql执行SQL语句的过程,以此来判断我们的SQL语句是否需要优化EXPLAIN介绍EXPLAIN是什么?  使用EXPLAIN关...

2020-01-05 08:56:50 147

原创 设计模式之观察者模式

设计模式之观察者模式 用过微信公众号的人都知道,当发布者发布一篇推文的时候,所有订阅者都会接收到订阅消息。基于这个应用场景,我们今天来聊聊设计模式中的观察者模式。介绍  观察者模式(也称发布-订阅模式)是一种行为型设计模式。该模式定义了一对多的依赖关系,发布者为一,订阅者为多。当发布者有消息改变时会推送更新数据,订阅者作为观察者感知消息的改变并实时改变自己的消息集。观察者模式UML类...

2020-01-04 17:20:17 93

空空如也

空空如也

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

TA关注的人

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