自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gandoph的博客

天道酬勤

  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

转载 彻底理解ThreadLocal

1.ThreadLocal相关类介绍ThreadLocalMap(内部类)Thread  首先,在Thread类中有一行: /* ThreadLocal values pertaining to this thread. This map is maintained by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap thr...

2018-05-24 20:25:17 211

原创 Java并发程序设计一

1.线程新建     不要用run()来开启线程,它只会在当前线程中,串行执行run()方法中的代码;创建线程时,推荐传入Runnable接口的实例,因为默认的Thread.run()就是直接调用内部的Runnable接口,这样避免了重载Thread.run(),因此使用Runnable接口来告诉线程该做什么更为合理。2.线程终止设置退出标志使线程正常退出,也就是run()方法执行完毕后正常终止线...

2018-05-24 00:07:36 231

转载 关于SimpleDateFormat安全的时间格式化线程安全问题

1.概述       想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避...

2018-05-23 14:31:11 162

转载 Java中常用的四中引用

1.强引用(StrongReference)      强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用:Object object = new Object();String str = "hello";      只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象...

2018-05-23 13:50:59 532

转载 数据库索引类型及实现方式

1.索引定义  数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。2.索引的优缺点优点:      1.大大加快数据的检索速度;         2.创建唯一性索引,保证数据库表中每一行数据的唯一性...

2018-05-21 23:00:40 3067

原创 AOP事物部分回滚的原因

1.概述Spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说:    事务回滚:throw new RuntimeException("xxxxxxxxxxxx");     事物不回滚:throw new Exception("xxxxxxxxxxxx"); 那么,如何在抛出Exception或者自定义异常时,事务也进行回滚呢?有以下几种方案:在捕...

2018-05-21 22:51:21 1020

转载 mysql 数据库引擎详解

一、数据库引擎  数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。二、数据库引擎任务  在数据库引擎文档中,各主题的顺序遵循用于实现使用数...

2018-05-21 20:44:04 262

转载 Java高内存占用问题排查

1.搞Java开发的,经常会碰到下面两种异常:                java.lang.OutOfMemoryError: PermGen space                java.lang.OutOfMemoryError: Java heap space      要详细解释这两种异常,需要简单重提下Java内存模型。Java内存模型是描述Java程序中各变量(实例域、静态...

2018-05-21 09:09:55 27575 1

转载 Java高CPU占用问题排查

      一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。      根据top命令查询出导致CPU满运行的进程,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。...

2018-05-21 08:55:53 203

转载 Java常见异常

Java Exception:1、Error 2、Runtime Exception 运行时异常3、Exception 4、throw 用户自定义异常异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这...

2018-05-20 22:06:29 118

原创 Java IO专题——字符流和序列化

1.字符流1)编码问题;2)认识文本和文本文件:Java的文本(char)是16位无符号整数,是字符的Unicode编码(双字节编码);文件是byte byte byte...的数据序列;文本文件是文本(char)序列按照某种编码方案(UTF-8、UTF-16、GBK)序列化为byte的存储结果;3)字符流(Reader/Writer):字符的处理,一次处理一个字符,字符的底层仍然是基本的字节序列...

2018-05-20 20:59:29 352

原创 Java IO专题——文件和字节流

1.编码问题    Java是双字节编码,Java一个字符占用两个字节,如下代码所示:import java.io.UnsupportedEncodingException;public class TestEncode { public static void main(String []args) throws UnsupportedEncodingException{ S...

2018-05-20 18:13:12 317

转载 为什么volatile不能保证原子性而Atomic可以?

     在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档...

2018-05-19 23:29:24 149

原创 int和Integer的区别

1.区别概述    1、Integer是int的包装类,int则是java的一种基本数据类型;    2、Integer变量必须实例化后才能使用,而int变量不需要;    3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值;    4、Integer的默认值是null,int的默认值是0;2.辨析理解    1、由于Int...

2018-05-19 21:59:20 490 1

原创 Java中的volatile关键字

1.内存可见性       由于 Java 内存模型( JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存中的数据,之后再将更新之后的数据刷新到主内存中。这里所提到的主内存可以简单认为是堆内存,而工作内存则可以认为是栈内...

2018-05-19 11:14:53 113

转载 深入并发包ConcurrentHashMap

原文地址:http://pettyandydog.com/2017/07/27/concurrentHashMap/前言以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相...

2018-05-18 23:39:38 198

原创 Java容器List、Set、Map详解

1.List、Set、Map概述       Collection List Set Map 区别记忆这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复,是否线程安全来进行区别记忆,以便恰当地使用。List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList、LinkedList和Vector。你可以将任何东西放到一个List容器中,并在需要时从中取...

2018-05-18 23:02:45 859

转载 深入理解分布式事务

1、什么是分布式事务       分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2、分布式事务的产生...

2018-05-17 20:16:27 156

转载 JVM 垃圾回收算法及回收器详解

原文地址:http://www.importnew.com/26383.html1.GC Roots       GC Roots就是一组必须活跃的引用。Java如果一个对象和GC Roots之间没有链接,那么这个对象也可以被视作是一个可回收的对象,即垃圾对象。Java中可以被作为GC Roots中的对象有:        1.虚拟机栈中引用的对象;        2.方法区中类静态属性实体引用的...

2018-05-17 19:00:37 165

转载 ReenTrantLock可重入锁和synchronized的区别

原文地址:https://blog.csdn.net/qq838642798/article/details/65441415可重入性       从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下...

2018-05-16 20:15:32 447

转载 Java线程池异常处理机制

原文链接:https://my.oschina.net/lifany/blog/884002一、前言      线程池技术是服务器端开发中常用的技术。不论是直接还是间接,各种服务器端功能的执行总是离不开线程池的调度。关于线程池的各种文章,多数是关注任务的创建和执行方面,对于异常处理和任务取消(包括线程池关闭)关注的偏少。接下来,本文将从 Java 原生线程、两种主要线程池 ThreadPoolEx...

2018-05-15 20:32:42 5031

转载 Java子线程中的异常处理(通用)

1.常见错误      在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了。那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相应的处理呢?也许有人会觉得,很简单嘛,直接在父线程启动子线程的地方try ... catch一把就可以了,其实这是不对的。2.原因分析      让我们回忆一下Runnable...

2018-05-15 19:43:26 1290

原创 Java并发程序设计基础

1.并发程序设计的基本概念1.并发和并行:并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的;并行是真正意义上的“同时执行”。2.临界区:用来表示共享资源或者公共数据,可以被多个线程使用,但是每一次只能有一个线程使用它,一旦临界资源被占用,其他线程要想使用这个资源就必须等待。3.阻塞和非阻塞:阻塞和非阻塞通常用来形容多个线程之间的相互影响。4.死锁:指两个或两个以上的进程在执行过程中,由于...

2018-05-15 07:14:47 208

原创 Redis缓存数据库深入理解

1.redis基本介绍    redis单机存量最大数据为7500万~8500万(开启redis虚拟内存功能),内存占用大约13G。相同数据模型,在13G内存下,redis保存的数据为8千万,memcached保存的数据为1亿;memcached写性能比redis性能要高;且达到内存上线时:memcached的只在临界点有点波动,而redis性能急剧下降(子进程dump数据及每秒产生大量页面错误)...

2018-05-14 22:53:25 467

转载 线程的生命周期

线程状态定义1. 新建(NEW):新创建了一个线程对象。2. 就绪(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。4. 阻塞(BLOCKED):阻...

2018-05-14 20:41:54 155

原创 如何判断线程池中所有线程是否执行完毕

1.根据线程池中的总线程数目等于完成的线程数目package com.luna.thread;import java.util.Random;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.Ti...

2018-05-14 19:44:40 11203

原创 Java反射

1.Class类的定义在面向对象的世界里,万事万物皆对象(除了基本数据类型和静态的东西),类也是对象且类是java.lang.Class类的实例对象;Class类对象的表示方法:package com.luna.model.reflect;public class ClassDemo { public static void main(String[] args) { Foo foo = ...

2018-05-12 23:51:41 242

原创 Java代理模式

1.代理模式      代理模式(Proxy),为目标对象提供一种代理以控制对目标对象的访问,即通过代理对象访问目标对象,且可以在目标对象实现的基础上增强或者删除额外的功能操作。2.JDK静态代理      JDK静态代理:目标对象与代理对象必须实现相同的接口或者继承相同的抽象类。eg:创建汽车类Car且汽车类Car拥有行驶的方法,针对某一个目标对象Car,生成对应的代理对象LogProxy,让代...

2018-05-12 15:00:30 280

原创 Java定时任务调度之Timer

定时任务定义    定时任务调度:基于给定的时间点、给定的时间间隔或者给定的执行次数自动执行的任务。JDK定时任务工具类Timer    Timer:有且仅有一个后台线程对多个业务线程进行定时、定频率的调度;Timer定时任务(schedule)的四种用法:task——TimerTask的实现类schedule(task,time);schedule(task,time,period);sched...

2018-05-11 23:07:28 358

原创 JDK8 HashMap详解

HashMap简介          1.  HashMap什么场景下使用equals方法?      HashMap是Java开发中我们最常用的容器之一,HashMap我们最长用的就是put(K, V)和get(K)。我们都知道,HashMap的K值是唯一的,那如何保证唯一性呢?我们首先想到的是用equals比较,没错这样可以实现,但随着内部元素的增多,put和get的效率将越来越低,这里的时间...

2018-05-09 16:57:22 475

转载 Zookeeper分布式锁

原文作者:阿凡卢出处:http://www.cnblogs.com/luxiaoxun/原文连接:https://www.cnblogs.com/luxiaoxun/p/4889764.htmlZookeeper分布式锁      完全分布式锁是全局同步的,这意味着在任何时刻没有两个客户端会同时认为它们都拥有相同的锁,使用 Zookeeper 可以实现分布式锁,需要首先定义一个锁节点(lock r...

2018-05-07 20:37:40 166

转载 Redis分布式锁实现

前言      分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性 首先,为了确保分布式锁可用,我们至少要确保锁...

2018-05-07 20:02:53 163

转载 数据悲观锁和乐观锁

锁( locking )      业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的 “ 锁 ” ,即给我们选定的目标数据上锁,...

2018-05-07 19:45:16 220

原创 Maven插件之自动生成实体和业务处理逻辑

Maven自动生成实体映射Dao在pom.xml中做两处配置在Maven配置文件pom.xml中引入mybatis-generator-core-1.3.5.jar,如下所示:<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-gene...

2018-05-05 22:58:38 283

原创 浅谈数字签名

数字签名      又称公钥数字签名、电子签章,是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名是非对称密钥加密技术与数字摘要技术的应用。对称加密加密是...

2018-05-05 17:09:24 385

原创 SSO单点登录实现

定义      单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。共享二级域名单点登录实现原理      首先根据用户输入的账号和密码,查询出用户信息(用户编号,用户名称,用户类型等重要且不易变化的字段),拼接用户的相关信息(用户编号,用户名称,用户类型等重要且不...

2018-05-05 14:52:25 265

原创 Java对象排序——Comparable和Comparator

Comparable是一个内比较器、是一个排序接口,实现Comparable接口的类可以自己和自己比较大小且表示该实现类支持排序,具体大小比较依赖Comparable中compareTo()方法的实现,接口实现:package com.luna.model.strategy;public interface Comparable { public int compareTo(Object o)...

2018-05-01 17:43:23 488

原创 Java集合容器ArrayList和LinkedList极简实现

Connection接口实现:package com.luna.model.iterator;/** * Connection接口实现 * @author luna */public interface Connection { void add(Object o); int size(); Iterator iterator();}Iterator迭代器接口实现:package...

2018-05-01 16:22:48 244

原创 常用设计模式大全

设计模式六大原则    1.单一职责:不要存在多于一个导致类变更的原因,即一个类只负责一项职责。(合成复用即多使用聚合);    2.里氏替换:所有引用基类的地方必须能透明的使用其子类的对象;    3.依赖倒置:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象;    4.接口隔离:针对接口编程,而不是针对实现编程。客户端不应该依赖它不需要的接口,一个类对另...

2018-05-01 08:15:53 219

自动生成Dao、Service工具类

Spring+SpringMVC+Mybatis+Redis+OSS项目工具类大合集

2018-05-05

空空如也

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

TA关注的人

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