自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot项目中集成JAXB实现XML与Java对象的互相转换

一、前言最近项目中遇到了一个这种需求:版本经理在上游环境通过配置XML的版本策略文件到我们系统,我们得解析XML的版本策略文件来看这些数据是否和我们系统后台的数据相一致,不一致的话,我们后台会去更新版本文件的数据,再通过定时调度把需要更新的版本文件推送给各个局点的设备进行升级。通过这个需求,我们可以发现业界的XML与Java对象的互相转换的是JAXB(Java Architecture for...

2019-08-30 00:32:48 5291 4

原创 SpringBoot项目中实现跨域的解决方案

一、什么是跨域现如今的开发项目一般都是前后端分离了,所以跨域访问会经常使用。现代浏览器出于安全的考虑,使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略,否则就是跨域的HTTP请求,默认情况下是被禁止的。跨域HTTP请求是指A域上资源请求了B域上的资源,举例而言,部署在A机器上Nginx上的js代码通过ajax请求了部署在B机器Tomcat上的RESTful接口。二、C...

2019-08-27 00:40:43 333

原创 SpringBoot项目中使用Logback实现多环境日志配置详解

一、前言SpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。logback框架会默认加载classpath下命名为logback-spring或logback的配置文件。将所有日志都存储在一个文件中,文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将error日志和其他日志分开,并且不同...

2019-08-24 02:17:05 3550

原创 Java中两个long类型进行相加运算,值溢出的解决方法

博主在项目中遇到了这个需求,开始用的int类型进行运算,字段是存的字节,然后后台进行相应的逻辑运算返回给前台,前台来转化成GB。大家都知道1GB=1024MB,1MB=1024KB,1KB=1024Byte,所以1GB=1024*1024*1024=1073741824Byte。所以问题来了,1GB的数据我后台就要存1073741824Byte,然后两个int类型进行相加直接溢出。我们先来回...

2019-08-21 20:59:16 10785

原创 源码解读之(五)ReentrantReadWriteLock(下)

上篇的中篇主要讲的ReentrantReadWriteLock的ReadLock的加锁和减锁过程:源码解读之(五)ReentrantReadWriteLock(中)这篇下篇主要来讲解讲解ReentrantReadWriteLock的WriteLock的加锁和减锁过程。四、WriteLockReentrantReadWriteLock的WriteLock加锁解锁过程依赖于AbstractQ...

2019-08-18 18:42:00 130

原创 源码解读之(五)ReentrantReadWriteLock(中)

上篇主要讲的ReentrantReadWriteLock的几个核心变量:源码解读之(五)ReentrantReadWriteLock(上)这篇中篇主要来讲解讲解ReentrantReadWriteLock的ReadLock的加锁和减锁过程。三、ReadLockReentrantReadWriteLock的ReadLock加锁解锁过程依赖于AQS类,所以有些相同的逻辑可以看看Reentra...

2019-08-18 18:05:35 83

原创 源码解读之(五)ReentrantReadWriteLock(上)

一、前言在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。相对于排他锁,提高了并发性。在实际应用中,大部分情况下对共享数据(如缓存...

2019-08-18 02:49:19 106

原创 MySQL中CONCAT()函数出现值为空的问题及解决办法

项目中用到了三个字段,需要对它们用concat() 函数进行拼接以及分组group by,下面一锅端了concat()的这个函数,有concat()、concat_ws()和 group_concat() 字段拼接的用法,我们来自己造点数据,做个测试。一、concat()1、准备一张test_concat表CREATE TABLE `test_concat` ( `id` int(11)...

2019-08-16 00:54:40 4370

原创 导致线程死锁的原因?怎么解除线程死锁

一、导致线程死锁的原因多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,而该资源又被其他线程锁定,从而导致每一个线程都得等其它线程释放其锁定的资源,造成了所有线程都无法正常结束。这是从网上其他文档看到的死锁产生的四个必要条件:1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用。2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。...

2019-08-14 23:35:46 1773

原创 countdowlatch 和 cyclicbarrier的用法以及区别

1、CountDownLatch一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个Count...

2019-08-12 23:06:09 169

原创 使用synchronized修饰静态方法和非静态方法有什么区别

1、Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。情况1:同一个对象在两个线程中分别访问...

2019-08-12 00:38:01 1523

原创 Java根据IP地址判断客户端属于哪个国家或地区

腾讯、新浪、淘宝都有相应的调用接口,这里我用的是淘宝第三方的接口。url: http://ip.taobao.com/service/getIpInfo.php/** * 根据IP地址判断客户端属于哪个国家或地区 * @param content 请求的参数 格式为:name=xxx&pwd=xxx * @param encodingString 服务器端请求编码。如GBK,UT...

2019-08-11 21:56:43 3087 10

原创 Java获取真实ip以及判断ip是否在指定范围

我们平时请求一些资源,对客户端和服务器的域名和ip应该再熟悉不过了;前台地址栏域名请求资源,域名会通过DNS解析器把域名解析成ip,但有时候我们后台得到不止一个ip,这是因为加了类似有反向代理功能的nginx,所以我们要得到真实的ip,自己要在后台做逻辑校验即可。1、获取真实ip下面来看Java获取真实ip的代码:/** * 获取真实的IP * @param request * @re...

2019-08-11 16:35:15 1508

原创 Java判断时间格式是否为yyyyMMddHHmmss的合法格式

话不多说,直接上代码!!!/** * 判断时间的格式是否为“yyyyMMddHHmmss”格式的合法日期字符串 * @param str * @return */public static boolean isValidDate(String str) { try { if (StringUtils.isNotEmpty(str)) { ...

2019-08-10 17:19:19 823

原创 源码解读之(四)AbstractQueuedSynchronizer

一、简介AbstractQueuedSynchronizer 队列同步器(AQS)是一个抽象类,,它是为实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等)提供的一个基础框架。AQS继承了AbstractOwnableSynchronizer类,这个类为创建锁和相关同步器提供了基础。AQS是Concurrent包的核心,lock就是在AQS的基础上实现的,阻塞队列,线程池...

2019-08-08 00:34:24 139

原创 线程挂起、恢复与终止

1、挂起和恢复线程通俗解释:你有一件很漂亮的衣服,你只想在约会的时候穿它,最近没人约你,你只好将它挂起来(这叫挂起suspend)。。。直到有一天有人约你,你把它穿起来(这叫唤醒resume)。。。Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死...

2019-08-04 00:58:04 518

原创 CAS机制是什么,如何解决ABA问题

将之前我们先来了解独占锁和乐观锁。独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。一、CAS 操作乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值...

2019-08-03 18:06:37 1596

原创 讲讲java同步机制的wait和notify

1、wait和notify的使用与区别对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有:void notify() Wakes up a single thread that is waiting on this object’s monitor.译:唤醒在此对象监视器上等待的单个线程void notifyAll() Wakes up...

2019-08-03 16:09:49 763

原创 用三个线程按顺序循环打印abc三个字母,比如abcabcabc(四种方式实现)

这道题看似简单,实则考察了你对多线程的重要知识的掌握情况。总体思路就是我们三个线程用同一把锁,刚开始,a线程获取锁,打印a,设置下一个打印b,并同时唤醒bc,这时候,bc线程都阻塞等待,如果c抢到了锁,进入代码执行,由于不符合条件,会wait(同时释放锁),直到b抢到锁,符合条件打印,如此,顺序执行下去。这里提供以下几种方法:一、Synchronized同步法使用同步块和wait、notif...

2019-08-02 00:29:05 922

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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