java
永远向前的麦田
这个作者很懒,什么都没留下…
展开
-
类加载过程
面试准备,干脆写些东西,总结下吧1、加载通过类全限定名获得类的二进制字节流;将类的字节流所代表的静态存储结构转化为方法区的运行时数据结构;在内存中生成类的Class对象,作为方法区该类的各种数据的访问入口。2、校验数据格式元数据字节码符号引用验证3、准备准备内存,用来存储类的static成员,并设置初始值。4、解析将类相关的符号引用替换为直接引用,包括类,方法,成员。5...原创 2020-02-28 13:55:04 · 132 阅读 · 0 评论 -
ReentrantLock使用和原理(AQS简述)
在开发过程中,synchronized是最简单的同步控制方法,在通常情况下是够用的,但synchronized时不响应中断,而且有时候,我们需要灵活的来控制加解锁。这时候可以使用ReentrantLock。 在以前的版本中,synchronized效率是远远低于ReentrantLock,后来经过优化,两者性能差距不大了。但ReentrantLock有一些新特性,是synchronized所不具...原创 2018-06-03 21:56:00 · 1358 阅读 · 0 评论 -
Semaphore详解
1、方法public void acquire()public void acquireUninterruptibly()public void release() public boolean tryAcquire(int permits)2、原理 Semaphore原理比较简单,类似ReentrantLock,使用AQS的模板模式来进行实现。//Semaphore....原创 2018-06-05 22:10:53 · 436 阅读 · 0 评论 -
ReentrantReadWriteLock详解
1、用法//初始化读锁和写锁ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); ReentrantReadWriteLock.ReadLock rlock = rwl.readLock();ReentrantReadWriteLock.WriteLock wlock = rwl.writeLock();//加解锁r...原创 2018-06-09 09:37:47 · 270 阅读 · 0 评论 -
CountDownLatch原理及使用
1、使用 通常用于多线程之间的等待 常用函数//用于state-1 void countDown() //主线程等待子线程做事情。 void await() throws InterruptedException2、原理 原理就是借助AQS的等待队列,代码很简单,这里不赘述。不过这里特意提一点,可以多个线程进行await,countDown将state减为0时,会唤醒所有的...原创 2018-06-09 09:45:20 · 420 阅读 · 0 评论 -
循环栅栏CyclicBarrier的使用及原理
1、使用 直接await即可。//指定等待数量public CyclicBarrier(int parties)//等待,触发归0则往下走int await()2、原理 使用ReentrantLock及相应Condition实现等待/阻塞/唤醒。 主要实现方法为private int dowait(boolean timed, long nanos) ...原创 2018-06-09 09:51:42 · 968 阅读 · 0 评论 -
LockSupport原理
1、使用 LockSupport和CAS操作是java并发包中很多控制机制的基础,都是通过UNSAFE来实现的。 LockSupport是基本的线程阻塞的原语,通过park和unpark来实现线程的阻塞和唤醒。LockSupport的每个使用它的线程都与一个许可(permit)有关,permit是一个0,1的开关,默认是0,unpark会将permit变为1。park会消耗permit,变为0...原创 2018-06-09 10:09:35 · 780 阅读 · 0 评论 -
ConcurrentHashMap 原理
HashMap在多线程中可能会出现死循环的问题,因而再多线程情况下需要使用其他替代方案。 1、选择 HashTable是一个方案,不过HashTable会对整个结构加锁(synchronized),在高并发访问情况下,效率很低,因而基本被废弃。 另一个就是ConcurrentHashMap了。 2、简述 ConcurrentHashMap的的实现在JDK1.8有较大的更改。JDK1....原创 2018-06-10 21:42:39 · 212 阅读 · 0 评论 -
Mysql主从备份记录
master在192.168.140.123上,slave在124上//第一部分、先配置master1、安装#先删除默认安装的 mysql lib 库。yum remove mysql*yum remove mariadb*#通过 RPM 命令进行安装unzip MySQL-5.6.28-1.el6.x86_64.ziprpm -ivh MySQL-server-5.6.28-1....原创 2019-02-20 15:32:18 · 420 阅读 · 0 评论 -
ThreadLocal
所谓ThreadLocal,就是每个线程人手一只笔,线程本地存储。 1、使用 ThreadLocal的常规用法是get和set方法,比如可能这样用static ThreadLocal<Object> tlObj = new ThreadLocal<>(); //如下使用方法 if(tlObj .get() == nu...原创 2018-05-05 09:13:56 · 203 阅读 · 0 评论 -
logback总结
spring-boot集成logback非常简单,只写一个logback.xml即可。1、根节点configuration<configuration debug="false" scan="true" scanPeriod="10 seconds">有3个属性 - scan,为true,表示如果配置文件发生更改,重新加载配置文件。默认为true。 - scan...转载 2018-04-24 20:01:18 · 273 阅读 · 0 评论 -
设计模式一览
最近总有想写点东西的冲动,想来想去,总结下设计模式吧,自己写一下,不容易忘掉。 1、策略模式 所谓策略模式,是将算法和策略进行分割的一种模式。之所以这样,其实是基于一种思想,将变化的部分和不变的部分分割开来,如果以后需要修改程序,或者需求变更,只需要修改这部分变化的部分即可,如果有多种算法,相互替换即可。 典型举例: 我有前n个月份的销售记录,希望预测下一个月的销量。这...原创 2018-04-05 12:17:34 · 211 阅读 · 0 评论 -
swagger
swagger集成原创 2017-04-26 20:31:50 · 1073 阅读 · 0 评论 -
获取Connection的方法
1、实际项目用的spring-mvc + jpa + hibernate,有需求来读取表名和列名。 方法一://有效,不过getConnectionProvider()是@Deprecated的,不建议用Session session = (Session)em.getDelegate();SessionFactoryImplementor sf = (SessionFactoryImplem原创 2017-04-26 16:45:24 · 2743 阅读 · 0 评论 -
swagger2
swagger需要导入swagger相关页面,比较麻烦。 swagger2更近一步,只需要做几个配置即可,更简单,更易用。项目基于spring-boot实现,下面指定配置点pom.xml依赖 <!-- swagger 框架依赖 --> <dependency> <groupId>io.springfox</groupId>原创 2017-06-27 20:19:47 · 1274 阅读 · 0 评论 -
MySQL提示密码过期
java连接mysql(5.6),提示如下Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Could not connect: Your password has expired. To log in you must change it using a client that supports expired passwo原创 2017-06-28 14:34:15 · 1143 阅读 · 0 评论 -
JAVA读写文件方法总结
ava.io下面有两个抽象类:InputStream和Reader InputStream是表示字节输入流的所有类的超类 Reader是用于读取字符流的抽象类 InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。 即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。 弄清了两个超类的根本区别,原创 2016-06-29 11:48:02 · 356 阅读 · 0 评论 -
HashMap总结
本文所使用的源码来自jdk1.8 1、存储 HashMap之所以访问很快,内部机制是通过数组+链表(链表长度大于8则转为红黑树)来实现的。 HashMap中最顶层的结构是哈希桶数组:transient Node<K,V>[] table;其中,Node即表示数组的一个元素,也是一个单向链表,结构如下: static class Node<K,V> implements Map.Entry原创 2017-10-08 20:01:14 · 352 阅读 · 0 评论 -
线程详解
线程状态public enum State { // 刚创建线程.还未执行 NEW, //线程已启动,或在等待分配cpu时间片 RUNNABLE, //线程阻塞状态,等待进入临界区,通过synchronized等待监视器锁 BLOCKED, //线程等待状态,通过Objec...原创 2018-01-07 11:32:40 · 188 阅读 · 0 评论 -
synchronized总结
用法: a、指定加锁对象,对给定对象加锁;synchronized(a){ ...}b、直接作用于实例函数,对指定实例加锁;public synchronized void f(){ ...}c、直接作用于静态函数,对当前类加锁;public static synchronized void f(){ ...}原理: 1、synch原创 2018-01-07 12:59:50 · 259 阅读 · 0 评论 -
java加载jar包中的库资源
1、加载jar包中资源 加载文件方法有很多,不过如果文件打包在jar包内如何进行加载呢?路径可以很轻易的获取,不过jar包是一个文件,而非一个文件夹,jar包中的资源并未解压到外部环境中,因而我们无法通过常用的加载文件的方法获知jar包中文件。通常通过如下接口来读取jar包中文件:InputStream in = this.getClass().getResourceAsStream("/lib/原创 2016-06-28 20:12:47 · 2982 阅读 · 1 评论