自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

.

  • 博客(415)
  • 资源 (3)
  • 收藏
  • 关注

原创 并发编程之深入理解CAS与Atomic原子操作类

Java并发之CAS

2022-10-26 09:30:00 158 2

原创 深入理解并发三大特性

JMM 与 CPU 缓存一致性

2022-10-21 09:00:00 178

原创 深入理解 ReentrantLock

ReentrantLock用法详解前言我们都知道JDK中已经有了synchronized 锁,为什么还要提供 ReentrantLock锁与 相比 ReentrantLock锁有什么优势?为什么需要提供这个锁?ReentrantLock 锁 和 synchronized 锁 该怎么选择?synchronized 锁隐式锁可冲入锁自动释放锁不能人为控制synchronized 锁 ,自动释放锁,好处是不需要我们担心释放锁,但也带来一个问题,如果下面代码锁总执行时间很长,也就意味着长时间

2022-04-04 16:27:59 2664 2

原创 深入理解读写锁ReentrantReadWriteLock

读写锁ReentrantReadWriteLock用法详解

2022-04-03 23:08:11 3092

原创 深入理解信号量Semaphore

Semaphore用法详解

2022-03-28 22:57:41 1617 1

原创 深入理解Redis分布式锁

Redis 分布式锁

2022-11-15 09:15:00 837 2

原创 Java 类加载机制与双亲委派

Java 类加载机制与双亲委派

2022-11-09 23:21:45 104

原创 深入理解CyclicBarrie

深入理解CyclicBarrier

2022-11-05 20:29:39 417

原创 深入理解CountDownLatch计数器

CountDownLatch实现原理

2022-11-03 09:00:00 93

原创 深入理解AQS

AQS

2022-11-01 09:30:00 95

原创 又是一年1024

又是一年1024,大家1024 快乐,吃好喝好玩好。

2022-10-24 09:00:00 21

原创 JAVA 根据身份证计算年龄 + 性别 + 身份证号码验证

【代码】JAVA 根据身份证计算年龄 + 性别 + 身份证号码验证。

2022-10-10 14:36:36 149

原创 模板模式+策略模式优化

模板模式+策略模式来进行优化实际应用

2022-09-25 21:59:29 259

原创 关于线程池需要注意的几点

关于线程池优化

2022-06-10 17:39:37 229 1

原创 关于局部变量的线程池,会不会被回收

关于局部变量的线程池,会不会被回收遇到个问题,模拟一下,得出结论。线上监控线程数量一直增加,经过查询是同事在使用线程池没有关闭伪代码如下 static void test(){ //方法内 定义线程池 ExecutorService pool = new org.apache.tomcat.util.threads.ThreadPoolExecutor(1, 2, 10, TimeUnit.SECONDS, new Synchronou

2022-05-23 22:19:19 449

原创 aop记录日志到db

前言业务开发中,某些业务需要记录用户操作前后的日志,做一些log操作证据。实现在业务代码前后加save log 操作到 db使用aop 不改变业务代码的情况下记录Logaop记录日志到db业务中全部打印日志记录部分日志到db部分日志需要记录到db这里我们自定义Log注解然后使用aop扫描次注解记录该日志操作Log注解import java.lang.annotation.*;@Target({ElementType.METHOD})@Retention(Retenti

2022-05-21 18:47:57 96

原创 AOP记录日志

AOP记录日志package com.xxxxxxx.config;import com.alibaba.fastjson.JSON;import com.ly.traffic.ground.cxy.config.util.AopUtil;import com.ly.traffic.ground.saas.base.helper.LoggerHelper;import com.ly.traffic.ground.saas.util.Constants;import org.aspectj.la

2022-05-21 18:40:14 70

原创 基于 Nacos 实现 Sentinel 规则持久化

基于 Nacos 实现 Sentinel 规则持久化前言Sentinel Dashboard中添加的规则数据存储在内存,微服务停掉规则数据就消失,在⽣产环境下不合适。我们可以将Sentinel规则数据持久化到Nacos配置中⼼,让微服务从Nacos获取规则数据。构建依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>sp

2022-05-08 19:17:03 381

原创 Sentinel 降级规则模块

Sentinel 降级规则模块流控是对外部来的⼤流量进⾏控制,熔断降级的视⻆是对内部问题进⾏处理。Sentinel 降级会在调⽤链路中某个资源出现不稳定状态时(例如调⽤超时或异常⽐例升⾼),对这个资源的调⽤进⾏限制,让请求快速失败,避免影响到其它的资源⽽导致级联错误。当资源被降级后,在接下来的降级时间窗⼝之内,对该资源的调⽤都⾃动熔断。Sentinel不会像Hystrix那样放过⼀个请求尝试⾃我修复,就是明明确确按照时间窗⼝来,熔断触发后,时间窗⼝内拒绝请求,时间窗⼝后就恢复。RT平均响应

2022-05-08 00:29:33 127

原创 sentinel 自定义返回限流信息

版本 <!--sentinel 核心环境 依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> &lt

2022-05-07 20:07:25 334

原创 nacos集群模式配置

集群更改这么几个地方更改新增集群配置文件绿色的例子文件更改内容为,集群的ip配置启动模式sh startup.sh -m cluster分别启动8848 8849 8850如果打不开管理页面,查看启动日志,可能是自己mysql没导入将这两个导入自己本地Mysql同时检查自己的mysql 账号密码是否正确。...

2022-05-04 23:19:32 549

原创 docker-compose

docker-compose概述在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容器只运行一个进程,因此运行多个微服务就要运行多个容器。多个容器协同工作需要一个有效的工具来管理他们,定义这些容器如何相互关联。compose 应运而生。compose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。compose 使用 YAML 文件来定义多容器之间的关系。一个 docker-compos

2022-05-04 17:27:25 620

原创 docker 制作镜像

镜像转容器制作镜像报错到本地docker save -o new_tomcat tomcat:8.5.78加载镜像docker load -i new_tomcat这种方式 挂载的文件不能复制到新镜像,容器里新建的文件是可以复制到新镜像的。dockerfileDockerfile****的基本结构Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。docker build命

2022-05-04 16:04:02 195

原创 docker数据卷

docker 数据卷docker cpdocker cp :用于容器与主机之间的数据拷贝。宿主机文件复制到容器内 docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH容器内文件复制到宿主机 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH拷贝文件到容器里./index.html : 宿主机文件trusting_gauss: 容器名/usr/share/nginx/html : 容器路径下do

2022-05-03 19:57:38 1481

原创 Future 用法详解

Future 用法详解前言为什么出现Future机制常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果。Future 用法详解用法很

2022-04-21 23:03:21 1209

原创 线程池原理

线程池原理线程池的实现原理线程池的实现原理其实可以看成一个生产者消费者模型。我们执行线程往线程池里提交任务,线程池里的线程去消费任务,其他的一些策略去保证线程池和系统安全,如拒绝策略,线程大小的控制,阻塞队列的大小。JDK中线程继承图如下可以看比较详细的具体的继承图顶级接口只有一个执行任务的方法public interface Executor { void execute(Runnable command);}ExecutorService 接口额外添加了一些 关

2022-04-17 23:37:06 247 2

原创 ExecutorCompletionService使用详解

ExecutorCompletionService使用详解前言ExecutorCompletionService 为什么需要使用这个类?jdk8提供的 CompletionService 接口,实现类 ExecutorCompletionService。我们先来看一个例子?很明显下面任务批量提交线程池,等待线程池运行,每个任务执行时间不同。 //此线程池线程递增 ExecutorService executorService = Executors.newCache

2022-04-16 16:45:14 2725 4

原创 CompletableFuture用法详解

CompletableFuture用法详解前言JDK汇总已经提供了异步编程的类Future<T>,为什么还要CompletableFuture这个类呢?我们通常在使用Future接口异步编程时,获取结果都需要阻塞获取。主线程中会阻塞,其实最好的结果是让它执行完结果后通知我们获取。还有一种情况,当我们需要多个异步结果嵌套时候,Future这个接口就就不能满足我们的实用场景了,可能需要我们手动在里面进行嵌套。对此,从JDK 8开始,在Concurrent包中提供了一个强大的异步编程工具 C

2022-04-05 19:20:34 1768

原创 线程池用法详解

线程池用法详解前言为什么需要用到线程池?众所周知线程是操作系统一种宝贵的资源,创建和销毁都很耗费资源,对此,java中针对这种情况实现出线程池思想,维护一定数量的线程,用到时候就不需要去创建,不使用时候,就销毁一定量的,保留一部分线程数量。Java线程池的工作流程Java线程池的工作流程为:线程池刚被创建时,只是向系统申请一个用于执行线程队列和管理线程池的线程资源。在调用execute()添加一个任务时,线程池会按照以下流程执行任务。如果正在运行的线程数量少于corePoolSize(用户定

2022-04-04 19:22:11 628 6

原创 StampedLock用法详解

文章目录StampedLock用法详解前言原因StampedLock锁使用场景StampedLock用法详解前言为什么需要用这个锁?已经有了读写锁 ReentrantReadWriteLock ,为什么还需要这个锁?原因读写锁存在一个问题:当读锁比例很多,写锁很少,锁竞争情况下,写锁抢到锁的机会就回少,读锁数量太大的情况下,写锁不一定能抢到锁。StampedLock锁使用场景当读写锁比例相差很大时候,为了均衡读和写不出现锁饥饿现象,特此JDK中引入了一个新的锁,用来防止读写时候出现锁饥饿。

2022-04-03 23:28:50 557 2

原创 线程池处理任务,异常处理

文章目录线程池处理任务,异常处理前言异常处理线程池处理任务,异常处理前言业务开发中我们使用线程池或者线程处理任务,异常如何处理,线程并不像平时try…catch那样捕获。异常处理Thread中,提供了一个返回线程异常的一个方法 Thread r = new Thread(run); r.setUncaughtExceptionHandler((t, e) -> { System.out.println(

2022-04-03 20:49:56 473

原创 Exchanger用法详解

Exchanger用法详解Exchanger适用场景Exchanger用于线程之间交换数据,其使用代码很简单,主要是使用是一个exchange()方法。一个简单的例子如下 Exchanger<String> exchanger = new Exchanger<>(); new Thread(()->{ System.out.println(" thread 1 "); try {

2022-03-28 22:22:42 317 1

原创 Phaser用法详解

Phaser用法详解用Phaser替代CyclicBarrier和CountDownLatchPhaser相比CyclicBarrier和CountDownLatch功能更强大,包括它两的所有功能。用Phaser替代CyclicBarrierpublic class PhaserTest1 { public static void main(String[] args) { Phaser phaser = new Phaser(); for (in

2022-03-27 23:07:34 607 1

原创 CyclicBarrier 用法详解

CyclicBarrier 用法详解CyclicBarrier使用场景用于协调多个线程同步执行操作的场合,所有线程等待完成,然后一起做事情( 相互之间都准备好,然后一起做事情 )例如百米赛跑,必须等待所有运动员都准备好了,才能比赛。运动员准备好,裁判也准备好,才能开始正式比赛。 CyclicBarrier cyclicBarrier = new CyclicBarrier(3); new Thread(() -> { try {

2022-03-27 22:16:00 4003

原创 CountDownLatch用法详解

CountDownLatch用法详解CountDownLatch使用场景线程计数器 用于线程执行任务,计数 等待线程结束用法一: 等待所有的事情都做完 //程序计数器 CountDownLatch countDownLatch = new CountDownLatch(2); //2个线程 ExecutorService executorService = Executors.newFixedThreadPool(2);

2022-03-27 21:45:44 11433 3

原创 自定义一个显示锁,并且这个锁存在超时机制

synchronized 锁存在几个问题我们在使用synchronized锁时候,由于synchronized(锁升级和锁竞争本文不讨论)特定锁机制,导致我们不能针对锁进行控制如果到获取到锁,但迟迟没释放锁,或者说执行时间过长,但是没有出现异常,就不会释放锁。static final Object lock = new Object(); synchronized (lock){ while (true){ //

2022-03-27 14:59:26 623

原创 线程的优雅关闭

线程的优雅关闭前言我们都知道线程是一段运行中的diamante,既然在运行中,我们怎么讲它停下来。能否强制让它停下来?强制停下来,是否会存在问题?有什么好的办法,可以优雅的让其停下来?如何优雅的关闭一个线程在JAVA中,一个线程一旦运行起来,就不要去强行打断它,合理的关闭是让它运行完,然后干净的释放资源,最后退出。如果一旦强制打断,那么线程中使用的资源如io等资源不会被正确释放,这么做是存在一定问题的。关于线程退出的几种方式首先JDK中给我们提供了销毁和停止线程的方法可以看到stop以及

2022-03-20 16:43:09 629 3

原创 多线程生产者消费者

生产者和消费者关于生产者消费设计模式一个负责生产 一个负责消费可以启动多个进行生产,也可以启动多个消费,最主要的是做好边界控制以及数据同步,写读互斥。简单的有锁实现,有锁当然会影响性能,当然写不是很频繁的话,也可以使用这种去实现这里使用thread 原生方法去实现生产者以及消费者,当然也可以使用Lock锁的condition信号和通知去实现package thread.thread;import java.util.LinkedList;import java.util.concurren

2022-03-20 16:12:29 372

原创 简单的自定义有序的LinkedList

package thread.juc.linkedlist;import java.util.NoSuchElementException;/** * 简单的自定义 LinkedList * 有序的LinkedList */public class SortLinkedList<E extends Comparable<E>> { private Node<E> head = null; private int size;

2022-03-19 17:10:31 235

原创 简单的自定义 LinkedList

package thread.juc.linkedlist;import java.util.NoSuchElementException;/** * 简单的自定义 LinkedList */public class LinkedList<E> { private Node<E> head = null; private int size; public LinkedList() { head = null; }

2022-03-19 17:09:42 163

js正则基本语法+例子

js一些简单的正则基本语法+例子,附带源代码,直接浏览器中打开即可

2018-08-01

springboot连接数据库,连接redis,jsp展示数据

springboot整合jsp,mybatis查询并展示数据到jsp页面,连接redis实现缓存展示数据,附带数据库(增删改没写,有查,数据库成功连接,我懒所以没写。)

2018-07-19

ssi增删改查

ssi增删改查 ,第一个表增删盖查,第二个表方法只写了,表连接两个表一对一,含数据库

2017-10-09

空空如也

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

TA关注的人

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