![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 58
匿名者X
匿名者X
展开
-
Eclipse 注释模板
好的注释可以增加代码的可读性,因此代码注释就非常重要了,下面为个人常用的一份eclipse模板设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素模板如下:文件(Files)注释标签:/** * @Title: ${file_name} * @Package ${package_name} * @Description: ${todo} *原创 2021-01-05 21:47:32 · 255 阅读 · 0 评论 -
多线程 - 父线程向子线程传值方案探讨
1 . ThreadLocal测试代码:public class TestThreadLocal { public static ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { //设置线程变量 threadLocal.set("hello world"); Thread thread = new原创 2021-01-04 13:38:24 · 468 阅读 · 0 评论 -
多线程 JDK线程池详解
线程池详解JDK类图Executor , ExecutorService , Executors 区别ExecutorExecutorServiceExecutor 是 Java 线程池的核心接口,用来并发执行提交的任务ExecutorService 是 Executor 接口的扩展,提供了异步执行和关闭线程池的方法提供execute()方法用来提交任务提供submit()方法用来提交任务execute()方法无返回值submit()方法返回Future对象,可用来获取原创 2020-12-31 16:17:03 · 278 阅读 · 0 评论 -
缓存与数据库双写一致性的解决方案
传统企业中为了解决高并发大流量的问题,通常使用缓存+数据库的方式来支撑高QPS的访问,虽然能解决读QPS的问题,但是同时也引入了新的问题,例如:缓存与数据库的数据不一致的情况;本博文参考网上相关的博文,详细的整理下缓存数据库数据一致性的问题,并且给出基于Java的代码解决方案关于缓存数据库数据一致性的解决方案,网上有很多,但是大都是偏向理论的,且大多数使用分布式锁来实现的,分布式锁也是一种解决方式,但是无疑增加了代码逻辑的复杂性,本博文主要是使用JVM自带的缓存队列+线程池来解决数据一致性的问题,并.转载 2020-12-12 19:00:44 · 744 阅读 · 1 评论 -
SprignCloud Hystrix 原理解析
背景分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。雪崩效应常见场景硬件故障:如服务器宕机,机房断电,光纤被挖断等。 流量激增:如异常流量,重试加大流量等。 缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中转载 2020-08-27 14:06:18 · 172 阅读 · 0 评论 -
JAVA中try、catch、finally带return的执行顺序
异常处理中,try、catch、finally的执行顺序,大家都知道是按顺序执行的。即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→finally。但是当try、catch、finally中加入return之后,就会有几种不同的情况出现,下面分别来说明一下。也可以跳到最后直接看总结。一、try中带有returnprivate int testReturn1() { int i = 1; try {转载 2020-08-26 14:32:36 · 179 阅读 · 0 评论 -
Java 中的位移运算符
最近在看一些在学习一些源码,在源码中经常会看到一些位移运算符的使用,比如在看HashMap源码的时候,在计算hashMap容量的阈值的时候,就使用到了位移运算符,代码如下:static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; .转载 2020-08-25 14:54:52 · 481 阅读 · 1 评论 -
Java中的与运算、或运算、异或运算
与运算&=具体规则为:两个二进制对应位都为1时,结果为1,否则结果为都0。int a = 5; // 0000 0101int b = 3; // 0000 0011a &= b; // 0000 0001System.out.println(a);或运算|=具体规则为:两个二进制对应位为0时该位为0,否则为1。int a = 5; // 0000 0101int b = 3; // 0000 0011a |= b; // 0000 00111S转载 2020-08-25 13:48:23 · 1191 阅读 · 0 评论 -
多线程中发生指令重排demo
指令重排是指:代码执行顺序和预期不一致。代码运行一般步骤为:1、从内存中获取指令解码2、计算值3、执行代码操作4、把结果写回内存而写回内存的操作比较耗时,CPU为了性能,可能不会等它完成,就进行对下一个指令解码计算。发生指令重排是CPU为了提高性能,但必须是对结果不影响的情况,比如:a =1; b =2; 先计算a 或者 b 对结果来说没有影响,就有可能发送重排;而像 a = 5; b = a*3;这样的代码则不会发生重排。一把发生指令重排在单线程中基本没啥影响,当时在多线程中,同原创 2020-08-24 09:46:00 · 446 阅读 · 2 评论 -
多线程_CAS原理分析
我们知道多线程操作共享资源时,会出现三个问题:可见性、有序性以及原子性。一般情况下,我们采用synchronized同步锁(独占锁、互斥锁),即同一时间只有一个线程能够修改共享变量,其他线程必须等待。但是这样的话就相当于单线程,体现不出来多线程的优势。那么我们有没有另一种方式来解决这三个问题呢?在上一章中,我们提到了一个volatile关键字,它可以解决可见性和有序性的问题。而且如果操作的共享变量是基本数据类型,并且同一时间只对变量进行读取或者写入的操作,那么原子性问题也得到了解决,就不会原创 2020-08-21 15:18:29 · 174 阅读 · 0 评论 -
多线程 LockSupport原理分析
一. LockSupport类介绍LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程。主要是通过park()和unpark(thread)方法来实现阻塞和唤醒线程的操作的。每个线程都有一个许可(permit),permit只有两个值1和0,默认是0。当调用unpark(thread)方法,就会将thread线程的许可permit设置成1(注意多次调用unpark方法,不会累加,permit值还是1)。 当调用park()方法,如果当前线程的permit是1,那么将permit设转载 2020-08-21 15:17:16 · 170 阅读 · 0 评论 -
多线程详细介绍
线程是程序执行的最小单元,多线程是指程序同一时间可以有多个执行单元运行(这个与你的CPU核心有关)。在java中开启一个新线程非常简单,创建一个Thread对象,然后调用它的start方法,一个新线程就开启了。那么执行代码放在那里呢?有两种方式:1. 创建Thread对象时,复写它的run方法,把执行代码放在run方法里。2. 创建Thread对象时,给它传递一个Runnable对象,把执行代码放在Runnable对象的run方法里。如果多线程操作的是不同资源,线程之间不会相互影响,不会产生任转载 2020-08-21 15:03:30 · 246 阅读 · 0 评论 -
多线程AQS同步器的实现原理
1.什么是AQS? AQS的核心思想是基于volatile int state这样的volatile变量,配合Unsafe工具对其原子性的操作来实现对当前锁状态进行修改。同步器内部依赖一个FIFO的双向队列来完成资源获取线程的排队工作。2.同步器的应用 同步器主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,对同步状态的修改或者访问主要通过同步器提供的3个方法:getState() 获取当前的同步状态 setState(int newState) 设置当前同步...转载 2020-08-21 14:25:58 · 148 阅读 · 0 评论 -
多线程 并发包api 简单介绍
1 . 可重入锁和不可重入锁可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,ReentrantLock 和synchronized 都是可重入锁,可重入锁最大的作用是避免死锁public class Test implements Runnable{ public synchronized void get(){ System.out.println(Thread.currentThread().getId()); set(); }原创 2020-07-27 10:54:51 · 183 阅读 · 0 评论 -
mysql 悲观锁以及乐观锁总结
悲观锁(Pessimistic Lock):每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。乐观锁(Optimistic Lock):每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的...原创 2018-06-02 05:01:22 · 214 阅读 · 0 评论 -
Redis集群中以scan 替代keys
1原创 2020-07-23 10:55:33 · 1289 阅读 · 0 评论 -
springboot logack日志打印
1. springboot 默认使用logback 作为日志打印框架,依赖为<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId></depend...原创 2020-03-31 10:10:57 · 253 阅读 · 0 评论 -
mybatis 自动填充时间字段
本例项目实践过程中,数据模型创建包含公共字段(创建时间createTime,最后更新时间last_updated_time),为了开发人员方便,打算自动填充时间公共字段;本例数据库采用oceanbase; 以下2种方式,可以处理以下场景问题1. 从数据库表创建角度解决,表创建时给时间字段加上默认值,例如下面案例CREATE TABLE TEST ( ID VARCHAR(100) DE...原创 2020-03-17 14:04:26 · 4211 阅读 · 0 评论 -
springboot 优雅停机实现
为了更好的实现服务资源释放,包括数据库连接池,线程池,注销微服务等,因此要实现优雅停服,springboot actuator 开放了shutdown端口,可以自定义实现优雅停服,案例如下public class GracefulShutDown implements TomcatConnectorCustomizer, ApplicationListener<ContextClose...原创 2020-03-11 10:59:45 · 485 阅读 · 0 评论 -
springboot 跨域问题后端解决方案
前后端分离项目,可能会出现跨越问题,案例解决方案如下:package com.eno.config.mvc;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.w...原创 2020-03-11 10:21:40 · 520 阅读 · 0 评论 -
springcloud feign增加响应报文解码类型
feign 默认只支持application/json 类型的响应报文,如果响应的并非这种类型,则无法解析,此时需要自定义实现案例如下:package com.eno.config.feign;import java.util.ArrayList;import java.util.List;import org.springframework.http.MediaType;i...原创 2020-03-11 10:05:40 · 1344 阅读 · 0 评论 -
springboot 线程池 异步线程上下文切换及信息传递
在主线程中开启异步线程任务时,主线程的信息时无法直接传递到子线程中,此时需要通过线程池实现上下文信息的传递案例如下package com.eno.config.thread;import java.util.Map;import java.util.concurrent.Callable;import java.util.concurrent.Future;import jav...原创 2020-03-11 10:00:19 · 2024 阅读 · 0 评论 -
springboot项目日志优化(整合logback框架)
为了更好的追踪和查看http请求信息,包括请求状态,参数,以及响应报文,因此定义aop切面,按照一定格式打印出controller层请求信息和响应报文信息,项目日志框架为log back 案例代码如下:package com.eno.config.aop;import java.lang.reflect.Method;import java.time.Duration;import ...原创 2020-03-11 09:17:09 · 665 阅读 · 0 评论 -
mybatis 拦截器打印完整sql实现
mybatis 打印完整sql实现package com.test.interceptor;import java.lang.reflect.Field;import java.sql.Statement;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import ja...原创 2020-03-11 09:09:36 · 991 阅读 · 0 评论 -
JavaBean 属性copy
1.spring 中BeanUtils.copyProperties() 2.apache commons-beanutils 中BeanUtils.copyProperties() 3.apache commons-beanutils PropertyUtils.copyProperties(),三者比较 org.springframework.beans.BeanUtils与org.apa原创 2017-08-26 22:47:29 · 535 阅读 · 0 评论 -
匿名内部类案例
匿名内部类访问方式1.内部类可以直接访问外部内的成员 包括私有成员 2.外部内要访问内部类成员或方法,必须要创建对象 3.访问方式:外部类.内部类 对象名=外部类对象.内部类对象案例一:class OuterClass { private int num=10; class InnerClass{ public void show(){ System.out.println(n...原创 2018-05-20 09:44:43 · 448 阅读 · 0 评论 -
JAVA 报文加密方式
jdk 加密案例一:对称加密import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import org.apache.tomcat.util.codec.binary.Base64;public class ChiperUtil { /** * * @param str * @pa...原创 2019-09-17 19:15:35 · 2314 阅读 · 0 评论 -
SSO单点登陆
一、单系统登录机制1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴...转载 2018-09-22 16:35:54 · 272 阅读 · 0 评论 -
JAVA IO 和 NIO分析
IO,NIO简单分析其实意味着:数据不停地搬入搬出缓冲区而已(使用了缓冲区)。比如,用户程序发起读操作,导致“ syscall read ”系统调用,就会把数据搬入到 一个buffer中;用户发起写操作,导致 “syscall write ”系统调用,将会把一个 buffer 中的数据 搬出去(发送到网络中 or 写入到磁盘文件)上面的过程看似简单,但是底层操作系统具体如何实现以及实现的细...原创 2018-06-10 17:22:08 · 174 阅读 · 0 评论 -
shell脚本实现weblogic 节点启停,应用部署
部署应用:java -cp /app/weblogic/wlserver_10.3/server/lib/weblogic.jar weblogic.Deployer -adminurl t3://ip:port -username weblogic -password weblgoic123 -name lsxdWeb01 -deploy /app/deploy/lsxdWeb01.wa...原创 2018-05-21 16:20:07 · 3413 阅读 · 0 评论 -
synchronized 和 volatile
synchronized:同步锁(锁主要提供2中特性,互斥性和可见性)互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享 ,变量可能是...原创 2018-06-03 21:44:17 · 158 阅读 · 0 评论 -
多线程 计步器,信号量,循环屏障demo测试
CountDownLatch CountDownLatch是java.util.concurrent(jdk1.5加入并发包)包下的类。CountDownLatch主要提供的机制是当多个(具体的数量等于初始化CountDownLatch时的count参数的值)线程都达到了预期状态或者完成预期工作时触发事件,其他线程可以等待这个事件来触发自己后续的工作。这里需要注意的是,等待的线程可以使多...原创 2018-06-02 17:54:58 · 439 阅读 · 0 评论 -
springmvc 集成logback
1.Spring MVC集成slf4j-log4jSpring MVC集成slf4j-log4j的过程,如下:1)在pom.xml文件中添加slf4j-log4j的依赖,完成后的classpath中将新增三个jar包,分别是:slf4j-api.jar、log4j.jar及slf4j-log4j.jar2)在当前classpath中添加log4j.prope...转载 2019-05-27 17:23:15 · 564 阅读 · 0 评论 -
JDK8 新特性日期时间操作
日期时间操作// 获取当前日期 LocalDate date = LocalDate.now(); System.out.println("当前日期:" + date);//当前日期:2019-09-17 // 获取指定日期 LocalDate specifyDate = LocalDate.of(2019, 1, 1); System.out.println("指定日期...原创 2019-09-17 14:52:01 · 194 阅读 · 0 评论