- 博客(21)
- 收藏
- 关注
原创 工厂设计模式
工厂模式定义 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模
2021-07-31 16:33:28 92
原创 spring 事务传播行为
传播行为:有七大传播行为,也是在TransactionDefinition接口中定义。 PROPAGATION_REQUIRED:支持当前事务,如当前没有事务,则新建一个。 PROPAGATION_SUPPORTS:支持当前事务,如当前没有事务,则已非事务性执行。 PROPAGATION_MANDATORY:支持当前事务,如当前没有事务,则抛出异常(强制一定要在一个已经存在的事务中执行,业务方法不可独自发起自己的事务)。 PROPAGATION_REQUIRES_NEW:始终新建一个事务,如当前原来
2021-07-31 11:46:03 290
原创 docker
docker安装 网址: https://docs.docker.com/ 镜像地址 hum.docker .com 卸载已安装的Docker和关闭防火墙和selinux sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest ...
2021-07-31 08:11:52 123
原创 15.SynchronousQueue
SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。一种没有缓冲的队列,生产者生产数据直接或被消费者获取并消费。 public class UseQueue { public static void main(String[] args) throws Exception { ...
2018-09-26 16:42:58 185
原创 14.DelayQueue
带有延迟时间的queue,其中的元素只有当它指定的延迟时间到了,才能从队列中获取该指定的元素,DelayQueue中的元素必须实现Delayed接口,它是一个没有大小限制的队列,应用场景比较多,比如缓存超时的数据移除,任务超时处理,空闲连接关闭等。 public class Wangmin implements Delayed { private String na...
2018-09-26 16:42:14 176
原创 13.ProprityBlockingQueue
它是基于优先级阻塞队列(优先级的判断通过构造函数传入的Compato对象来决定,也就是传入的队列对象必须实现comparable接口),在实现ProprityBlockingQueue时,内部控制线程的锁采用的是公平锁,它也是一个无界队列。 public class Task implements Comparable<Task>{ private int id ; ...
2018-09-26 16:40:58 348
原创 12.LinkedBlockingQueue
它是基于链表的阻塞队列,其内部也维护这一个数据缓冲队列(该队列由链表组成),LinkedBlockingQueue能够高效的处理并发数据,是因为其内部实现了分离锁,从而实现消费者和生产者完全并行,是一个无界队列。 public class UseQueue { public static void main(String[] args) throws Exception { ...
2018-09-26 15:58:49 118
原创 11.ArrayBlockingQueue
它是基于数组阻塞队列实现,在ArrayBlockingQueue内部,维护了一个定长数组,以便缓存队列中的数据对象,其内部没有实现读写分离,也就意味着生产和消费不能完全并行,长度也是需要定义的,可以指定先进先出或者先进后出,也叫有界队列。 public class UseQueue { public static void main(String[] args) throws Ex...
2018-09-26 15:40:58 138
原创 9.ConcurrentLinkedQueue
它是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue,它是一个基于连接节点的无界线程安全队列,该队列元素遵循先进先出的原则,头最先加入,尾最近加入,不允许有空元素。 ConcurrentLinkedQueue重要方法 Add()和offer()都是添加的方法。 Poll()和peek()都是...
2018-09-26 15:16:37 150
原创 10.BockingQueue
它是一个队列,支持阻塞机制,阻塞的放入和得到数据。 常用方法: Offer(anObject):表示如果有可能,将anObject加到队列中,如果可以容纳,则返回true,否则返回false,(本方法不阻塞当前执行线程的方法)。 Put(anObject):把anObject添加到队列中,如果队列没有空间,调用方法的线程被阻塞,直到队列有空间再加入。 Poll(time):取走队列中排在首...
2018-09-26 14:36:38 262
原创 8.CountDownLatch
CountDownLatch是一种同步手段,允许一个或者更多的线程等待,直到在其他线程正在执行的一组操作完成。给定count数目后CountDownLatch被初始化。await()方法阻塞,直到由于调用countDown()方法,当前count值达到0,之后所有等待线程被释放,而任何后续await()方法的调用会立即返回. public class ListAdd2 { private...
2018-09-26 14:34:24 79
原创 7.wait/notify方法。
Wait和notify方法必须配合synchronized关键字使用。 Wait方法释放锁,notify方法不释放锁。 public class ListAdd1 { private volatile static List list = new ArrayList(); public void add(){ list....
2018-09-26 14:33:03 90
原创 6.volatile关键字。
Volatile关键字的主要作用是使变量在多个线程间可见。 在java中,每一个线程都会有一块内存区,其中存放着所有线程共享的主内存中变量值的拷贝,当线程执行时,他在自己的工作内存中操作这些变量,为了存取一个共享变量,一个线程通常先获取锁定并清除他的内存工作区,把这些变量从所有的共享内存区中装入到他自己所在的工作内存区中,当线程结束时保证该工作内存区中变量的值回到共享内存中。 V...
2018-09-12 17:22:56 113
原创 5.synchronized代码块。
使用synchronized声明的方法在某些情况下是有弊端的,比如:当A线程调用同步的方法执行一个长时间的任务,那么B线程就需要等待较长的时间才能执行,这样情况下可以使用synchronized代码块去优化代码的执行时间,减小锁的粒度。 public class Optimize { public void doLongTimeTask(){ try { ...
2018-09-12 17:21:46 196
原创 4.脏读。
对于对象的同步和异步的方法,在设计程序的时候一定要考虑问题的整体性,不然会出现数据不一致的错误,经典的就是脏读。 在对对象加锁的时候,要考虑业务的整体性,及为setValue/getVaule方法同时加锁synchronized关键字,保证业务的原子性,不然会出现错误。 public class DirtyRead { private String username = "f...
2018-09-12 17:18:14 794
原创 3.对象锁的同步和异步问题
同步:synchronized 同步的概念就是共享,如果不是共享资源就没必要进行同步。同步的目的是为了线程安全,需要满足两个特性,原子性,可见性 异步:asynchronized 异步的概念就是独立,互相之间不受影响。 t1线程先持有object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法。 public class MyO...
2018-09-12 17:17:03 141
原创 2.synchronized
synchronized:关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock) public class MultiThread { private int num = 0; /** static */ public s...
2018-09-12 10:52:28 155
原创 1.线程安全
线程安全概念: 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。 synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区" " public class MyThread extends Thread{ private int count = 5 ;...
2018-09-12 10:28:58 113
原创 微服务与spring cloud
理解微服务 软件架构演进 软件架构的发展经历了从单体结构、垂直架构、SOA架构到微服务架构的过程。 单体架构 特点: 1、所有的功能集成在一个项目工程中。 2、所有的功能打一个war包部署到服务器。 3、应用与数据库分开部署。 4、通过部署应用集群和数据库集群来提高系统的性能。 优点: 1、项目架构简单,前期开发成本低,周期短...
2018-07-29 09:35:20 474 1
原创 Spring缓存注解@Cacheable、@CacheEvict、@CachePut区别
@Cacheable:使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。@CachePut:@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。...
2018-07-10 17:42:23 686
原创 json和json对象
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区","age":25}//JSON
2018-01-15 15:35:36 210
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人