自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring创建bean的几种实例

spring创建bean的四种常用实例通过反射调用构造方法创建bean对象通过静态工厂方法创建bean对象通过实例工厂方法创建bean对象通过FactoryBean创建bean对象通过反射调用构造方法创建bean对象调用类的构造方法获取对应的bean实例,是使用最多的方式,这种方式只需要在xml bean元素中指定class属性,spring容器内部会自动调用该类型的构造方法来创建bean对象,将其放在容器中以供使用。语法<bean id="bean名称" name="bean名称

2020-06-04 13:03:01 377

原创 Spring容器基本使用及原理

IOC容器IOC容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制。我们需要使用的对象都由ioc容器进行管理,不需要我们再去手动通过new的方式去创建对象,由ioc容器直接帮我们组装好,当我们需要使用的时候直接从ioc容器中直接获取就可以了。那么spring ioc容器是如何知道需要管理哪些对象呢?配置支持xml格式和java注解的方式,在配置文件中列出需要让ioc容器管理的对象,以及可以指

2020-06-04 09:36:24 224

原创 Spring控制反转和依赖注入

1.有A和B两个类,都有m1 的方法public class A{ public void m1(){}} public class B{ public void m1();}2.现在我们调用B的m1方法完成一些事情,而B中的m1方法需要调用A中的m1方法才可以完成这个事情,所以B的代码变成了下面这样public class B{ private A a; public B(A a){ this.a = a; } p

2020-06-03 21:18:16 196

原创 代理模式(转载)

https://blog.csdn.net/yangbaggio/article/details/89950200

2020-06-01 10:09:32 151

原创 状态模式

状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类https://blog.csdn.net/liummmin/article/details/105920611总结归纳就是每个类继承抽象类state , 每个实体类放一个activity,通过构造方法,传递行为代码实现:package com.longchuang.rongh

2020-05-20 22:49:51 141

原创 Java中的委托和继承(Delegation and Inheritance)

https://blog.csdn.net/Seriousplus/article/details/80462722#%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2这个博主大大写的真的好

2020-05-17 21:08:58 330

原创 适配器与组合模式

适配器的优点有一场景,就是不同的人实现不同的集合A 使用数组的形式存放集合B 使用List的方式存放集合思考如何把两个集合数据很好的放到一块解决方案:每个方法写一个适配器,调用方直接调用适配器上面调用java.util中的迭代器进行操作。上面那个Menu接口,可以解耦上面的问题是,每当出现一个类,就会出现每当你添加一个菜单,就会修改构造方法和多调用一次printMenu,以下修改看上去没什么问题了,但是当菜单包含子菜单的时候,问题又出现了。是无法被迭代的组合模式允许你将对象组合

2020-05-17 20:50:07 206

原创 TreeMap\TreeSet和ConcurrentSkipListMap\ConcurrentSkipListSet

ConcurrentSkipListMap提供了一种线程安全的并发访问的排序映射表。内部是SkipList(跳表)结构实现,在理论上能够在O(log(n))时间内完成查找、插入、删除操作。SkipList是一种红黑树的替代方案,由于SkipList与红黑树相比无论从理论和实现都简单许多,所以得到了很好的推广。SkipList是基于一种统计学原理实现的,有可能出现最坏情况,即查找和更新操作都是O(n)时间复杂度,但从统计学角度分析这种概率极小。使用SkipList类型的数据结构更容易控制多线程对集合访问的

2020-05-15 22:10:50 310

原创 DelayQueue实际运用转载

DelayQueue是一个无界阻塞队列,可以用做延时处理,所谓延时处理就是说可以为队列中元素设定一个过期时间,其中的元素只有在时间到期时才能从中被提取。该队列的头部是延迟期满后保存时间最长的Delayed 元素。存放到DelayDeque的元素必须继承Delayed接口。Delayed接口使对象成为延迟对象,它使存放在DelayQueue类中的对象具有了激活日期。该接口强制实现下列两个方法。Co...

2020-05-06 22:34:44 151

原创 SynchronousQueue 转载

https://blog.csdn.net/hudashi/article/details/7076814SynchronousQueue是这样 一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在;除非另一个线程试图移除某个元素,否则也不能(使用任何方...

2020-05-06 21:03:40 112

原创 ArrayBlockingQueue、PriorityBlockingQueue、LinkedBlockingQueue的使用

`ArrayBlockingQueue` 是一个先进先出的有界队列,初始化容量后,无法进行修改apiadd 超出队列会报错 java.lang.IllegalStateException: Queue full (对应的remove 方法)offer 添加返回true 和 falseput 会阻塞 (对应的take)poll 拿不出来,返回nullpeek 只拿出第一位,不会删...

2020-05-05 22:04:03 388

原创 java 跳表

转载简书https://www.jianshu.com/p/60d2561b821c

2020-05-05 11:35:00 123

原创 ScheduleExecutorService得使用

ScheduleExecutorService 效果和quartz 得效果差不多实际开发中还是用quartz 比较好,但是看场景吧api 得使用public class ScheduleExecutorServiceTest { private static Runnable blockRunner = () -> { try { Ti...

2020-04-25 10:06:27 187

原创 ExecutorCompletionService 的使用

Future 有一个问题就是,他的get 方法是把全部数据处理完再拿出来的。ExecutorCompletionService 可以做到拿一条输出一条 public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executo...

2020-04-19 22:26:53 257

原创 Future的API使用

get() 方法是阻塞得get(10,TimeUnit.SECONDS) get 的超时方法,线程里面并不会死掉isDone() 判断有没有做完cancel() 取消(代码里详细记录)public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutExcepti...

2020-04-19 18:09:04 838

原创 java线程池使用

所有的线程执行都是围绕着ExecutorExecutor 本身事不具备线程池执行能力,ExecutorService 添加了一些操作

2020-04-19 15:12:10 383

原创 phaser 使用

摘抄:https://www.jianshu.com/p/1517a379fb91可参考:https://www.iteye.com/blog/shift-alt-ctrl-2302923常用方法1,设定任务数(这是官方解释,简单的讲比如我们指定任务数为3,那3个线程都运行到指定地方他们才会分别继续往下执行)\\批量设置任务数public int bulkRegister(int p...

2020-04-04 16:55:42 264

原创 StampedLockd实现读写锁

廖雪峰老师的亲笔,我偷来的知识转载:https://www.liaoxuefeng.com/wiki/1252599548343744/1309138673991714前面介绍的ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。如果我们深入分析ReadWriteLock,会发现它有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不...

2020-04-02 21:15:15 249

原创 多线程 condition 使用

Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来模拟线程间协作。Condition...

2020-03-31 22:02:51 166

原创 可重入锁和不可重入锁概念和区别(顺便介绍一下ReentrantLock和ReentrantReadWriteLock)

文章转载自:https://blog.csdn.net/u013452335/article/details/86576939概念可重入锁就是一个类的A、B两个方法,A、B都有获得统一把锁,当A方法调用时,获得锁,在A方法的锁还没有被释放时,调用B方法时,B方法也获得该锁。这种情景,可以是不同的线程分别调用这个两个方法。也可是同一个线程,A方法中调用B方法,这个线程调用A方法。不可重入锁就...

2020-03-30 22:06:44 333

原创 Semaphore 简单使用

文字摘抄于:https://yq.aliyun.com/articles/632589Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。换句话说,锁(Lock锁或synchronized锁)在任何时刻只允许一个任务访问被加锁的资源,而计数信号量允许n个任务同时访问这个资源,还可以将信号量看作是向外分发使用资源的“许可证”,尽管内部没有...

2020-03-22 22:07:29 118

原创 Exchanger 简单了解

文字摘要于:https://yq.aliyun.com/articles/632589Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也 执行exchange方法,当两个线...

2020-03-22 20:39:07 245

原创 CyclicBarrier 使用

CyclicBarrier 原理和countDownLatch 差不多,都是等大家任务都做完了,再执行下面的步骤。但是使用上还是有点区别的。public class Test { public static void main(String[] args) { /** * CyclicBarrier(int parties, Runnable barrierAc...

2020-03-16 22:11:00 113

原创 CountDownLatch 使用场景

/** * 第一个使用场景 * 数据使用多线程的方式处理 */public class CountDownLatchTest { private static ExecutorService executor = newFixedThreadPool(2); private static final CountDownLatch latch = new CountDow...

2020-03-15 21:27:33 152

原创 Atomic XXX 的原子操作

我们知道volitale 关键字他是不具备原子性的,但是Atomic XXX 都是具备原子性操作public static void main(String[] args) { //AtomicInteger AtomicInteger atomicInteger = new AtomicInteger(); System.out.println(ato...

2020-03-15 16:48:47 134

原创 设计模式- 主动对象(Active Object)

以下两段文言摘抄自https://blog.csdn.net/qq276592716/article/details/19421359流程对每一个要求并发执行的对象,分离其方法的调用和执行。这样,这个对象的客户就像是调用一个常规的方法一样。这个方法,自动把任务交给另外的线程完成执行。主动对象的组成:一个代理者(Proxy)实现外部的访问接口;一个执行者(Servant)。代理和执行者在不同的...

2020-03-11 20:28:06 715

原创 CountDown 实现原理

如果在主线程中,使用线程,要使主线程在线程后面运行,那么要添加 join现在我们可以使用countdownlatch 来决定。那么先模拟一下,countdownlatch 的实现吧public class CountDown { private final int total; private int counter = 0; public CountDown(...

2020-03-08 15:49:56 443

原创 ThreadLocal及应用

threadlocal一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据。static final ThreadLocal<T> threadLocal = new ThreadLocal<T>();threadLocal.set("aa");threadLocal.get();他的实现原理大致可以这样理解:通过线程的名字...

2020-03-07 16:35:42 82

原创 保护性暂挂模式(Guarded Suspension)

核心思想如果某个线程执行特定的操作前需要满足一定的条件,则在该条件未满足时将线程暂停运行(即暂挂线程,使其处于等待(waiting)状态,直到该条件满足时才继续运行)public class Requets{ final private String value; public Requets(String value) { this.value = val...

2020-03-06 22:10:17 187

原创 多线程中Future的原理

通过Future 异步回调,不阻塞下面的执行,并且在方法最后执行完毕前,调用方法或通过回调的方法获取返回值。其核心其实就是创建一个线程这也是多线程的一个设计模式public interface Future<T> { T get() throws InterruptedException;}这边在方法中添加synchronized 关键字,就是防止多线程问题。p...

2020-03-06 16:23:19 472

原创 读写锁实现原理

仅模拟读写锁的实现原理,具体使用还是Java并发包中ReadWriteLock读写锁的原理读和读互不影响,读和写互斥,写和写互斥部分逻辑可参考,但是下面的代码时有问题的,比如统计读写锁的统计,尚且不添加volitile关键字就是一大错误了。代码实现...

2020-03-05 20:29:31 803

原创 java基本类型和引用类型

一、基本数据类型:byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32767,默认值0int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0long:长整型,在内存中占64位,即8个字节-263...

2020-03-05 14:49:48 200

原创 基于观察者模式,写的多线程监听

主要用于并发不高的多线程监听public interface LifeCycleListener { void onEvent(ObservableRunnable.RunnableEvent event);}public abstract class ObservableRunnable implements Runnable{ final protected Li...

2020-02-25 21:11:33 201

原创 volatile 关键字的一些记录

volatile 关键字的一些记录public class VolatileTest { private volatile static int INIT_VALUE = 0; private final static int MAX_VALUE = 10; public static void main(String[] args) { new ...

2020-02-20 15:37:16 82

原创 mybatis 中selectKey 使用

mybatisselectKey 使用我们很多时候,主键自增,返回主键值,都是通过注解的方式,现在用selectKey 的使用。通过selectKey 获取 返回对象的主键值 <insert id="insert" parameterType="com.longchuang.ronghe.model.Test" > <!-- order 执行的顺序,如果为before...

2020-02-18 15:56:47 531

原创 fastjson中使用SimplePropertyPreFilter忽略指定属性

SimplePropertyPreFilter忽略指定属性将对象转换成json格式的时候,常常需要排除一些字段(比如密码等不能够被展示的东西)。在fastjson库中,我们可以使用SimplePropertyPreFilter忽略掉这些属性。Student stu = new Student("name","age");SimplePropertyPreFilter filter = new...

2020-02-17 15:45:21 1291

原创 net.sf.json使用

net.sf.json 使用import net.sf.json.JSON;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;import net.sf.json.xml.XMLSerializer;import org.junit.Test;import...

2020-02-17 14:42:07 409

原创 HttpClient 详解

HttpClient 详解参考 https://blog.csdn.net/justry_deng/article/details/81042379感谢大佬分享的demo自己练习下,记录只为了下次更方便的查找,侵权删http 请求,apache 的一套封装不错的http请求下面的案例都是先有http请求的,再有接口。get 无参请求 /** * get 无参请求 ...

2020-02-15 09:50:58 540

原创 StringUtils工具类

实际工作中一些记录 String ggg = StringUtils.join(new String[]{"i", "love","you"}, " - "); System.out.println(ggg); // i - love - you

2020-02-13 22:12:44 76

原创 Slf4j MDC机制及日志应用实战

参考:https://blog.csdn.net/xxcupid/article/details/51955356(这个作者写了一系列,挺容易上手看的)下面是使用时须知MDC 是日志的增强功能,如果配置了MDC,并添加了相应的key value,就会在打日志的时候把key对应的value打印出来。如果不用MDC.clear()的话会有什么影响?答:如果都是用new Thread方法建立的线...

2020-02-13 09:56:16 1023

空空如也

空空如也

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

TA关注的人

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