- 博客(15)
- 收藏
- 关注
原创 java读写锁ReentrantReadWriteLock使用
为什么要使用读写锁读写锁采用读锁与写锁分离等待方法,能够更加细粒度进行代码同步。提高代码并发量。如代码都是进行读操作时,多线程读取并不会带来线程安全问题,若加入锁,则会带来没必要的资源浪费,影响代码运行速度。引入读写锁能解决此问题读写锁遵循规则当读锁被获取时,写锁无法被获取,而读锁能正常被获取当写锁被获取时,读锁和写锁都无法被获取代码实现线程资源类class Readwrite { private volatile int count = 0; ReentrantReadW
2021-06-13 13:14:07
1360
1
原创 java线程池参数及使用
线程池创建方式一:通过new ThreadPoolExecutor创建线程;ThreadPoolExecutor有7个参数;分别为corePoolSize核心线程数;maximumPoolSize最大线程数;keepAliveTime非核心线程闲置回收时间;unit时间单位;workQueue核心线程数满了之后,进入排队的线程队列;threadFactory线程工厂(一般使用默认线程工厂Executors.defaultThreadFactory())RejectedExecutionHa
2021-06-08 22:48:46
167
原创 synchronized和ReentrantLock的区别
synchronized是java关键字,ReentrantLock是java的apisynchronized不可手动加锁解锁,ReentrantLock需要手动加锁,手动解锁synchronized不可中断,ReentrantLock可通过tryLock获取锁等待最长时间synchronized为非公平锁,ReentrantLock和设置公平锁或非公平锁...
2021-06-07 14:50:04
114
原创 AQS源码详解
什么是AQSAQS是AbstractQueuedSynchronizer即抽象队列同步器。JUC中的很多类都用到了AbstractQueuedSynchronizer。如ReentrantLock、CountDownLatch、Semaphore底层都是实现了AbstractQueuedSynchronizer代码解析ReentrantLock加锁当我们使用ReentrantLock时发生了什么事呢?ReentrantLock默认创建一个非公平所,并赋给sync;Sync类继承了Abst
2021-05-31 14:40:53
117
原创 springboot配置访问本地静态资源
有时候我们需要访问到本机的静态资源,如图片数据。可以通过配置请求映射本地资源路径对资源进行访问。比如我想访问d:/img下面的图片我想通过localhost:8088/aaa/2021040823255616068.jpg访问第一张图片。因此,我需要将/aaa下面的所有请求映射到d:/img然后需要排除拦截器对/aaa请求路径下的拦截配置完成后即可访问...
2021-05-23 21:54:43
278
原创 java动态代理实现
由于java动态代理只能代理接口,因此,我需要先定义被代理对象的接口。interface Hello{ void print();}然后定义实现类class HelloImp implements Hello{ public void print(){ System.out.println("你好呀"); }}我们需要定义一个类对被代理对象方法调用后进行处理。这个类需要实现InvocationHandler这个类需要重写invoke方法class
2021-05-20 16:55:48
64
原创 idea开启热部署
maven导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</o.
2021-05-06 15:36:55
79
原创 tcp要三次握手四次挥手
tcp报文格式tcp三次握手client向客户端向服务端发送一个新的连接请求SYN=1 生成一个随机seq,服务端收到请求后,也向客户端发送一个新的连接请求,SYN=1并生成一个随机的seq,发送ACK=1表示确认收到,并发送一个确认序列号为客户端发送过来的序列号+1。客户端接收到服务端请求后,想服务端发送一个ACK确认标志,并发送ack确认序列号,改确认序列号为服务端发送的seq序列号+1tcp四次挥手客户端向服务端发送FIN = 1 以及seq序列号,服务端收到后,发送ACK 以及确认序列
2021-04-30 13:03:47
85
原创 B-树和B+树
B树一个M阶的B树节点的关键字个数最少为M/2(向上取整)-1,如一个5阶的B树每个节点的最小关键字个数为5/2(向上取整)= 3 -1 =2。每个节点最多有M个分支, M-1个关键字,关键字的空隙对应一个子节点B+树一个B+树节点的关键字个数最少为M/2(向上取整),最多为M,B+树中非叶节点不报错信息,只有叶子节点保存信息。每个关键字对应一个子节点...
2021-04-28 16:01:07
1411
1
原创 红黑树特性以及插入破坏平衡的情况以及修复方法以及java实现
红黑树特性每个节点一定是黑色或红色插入的节点一定是红色从任意一个节点到任意一个根节点经过的黑色节点都相同红色节点的子节点和父节点必是黑色节点红黑树根节点一定是黑色
2021-04-28 13:07:40
127
原创 java中cyclicBarrier、countDownLatch、semaphore的使用
countDownLatch创建countDownLatch对象每次线程调用countDown在主线程设置await每次调用countDown时,countDown对象计数器都会-1,当减到3时,await就会进行释放,主线程将会启动import java.util.concurrent.*;public class threadpooltest{ public static void main(String[] args) {// CyclicBarrier c
2021-04-28 09:48:51
91
原创 rabbitmq的几种模式
首先创建三个队列,便于下面演示fanout模式fanout相当于发布订阅模式,生产者发布消息后,交换机会将消息发布到绑定的queue。其流程如下创建交换机将queue1 queue2 queue3绑定到交换机上生产者发送消息给交换机每个队列都接收到一条消息读取队列中的消息direct模式direct模式相当于exchange交换机绑定队列时加上一个Routing key生产者每次将消息给交换机的时候,会带上Routing key,交换机会将消息发送到绑定该Routing
2021-04-26 16:35:43
78
原创 java简单实现rabbitmq发送接收消息
导入依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.10.0</version> </dependency>创建生产者package com.yang;impor.
2021-04-26 14:21:45
365
原创 使用Vmware虚拟机做为服务器,本机进行访问
本次将在虚拟机中开启tomcat,在本机对虚拟机的tomcat进行访问由于虚拟机上可以安装docker,可以快速进行环境部署,所以有时需要在Linux上使用docker部署完环境后,本机通过ip+端口进行访问。首先需要将虚拟机设置为桥接模式本机要访问虚拟机端口,需要将虚拟机和本机设置为同一网段可以看到本机和虚拟机位于同一网段,都为172.16.35.0至此配置完毕...
2021-04-26 10:04:44
1166
原创 JAVA equals 和 == 的区别
**比较基本类型只能用 ==****比较Sting** == 比较String是否是一个对象 equals 比较值是否相等 因为String重写了equals比较对象 == 和 equals 一样
2021-04-06 11:03:28
52
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人