YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

上一篇文章多线程经典实例(一) 讲到了几个多线程相关的例子,接下来我们来看一个经典的案例:生产者消费者问题。 介绍生产者消费者问题是多线程中的一个经典问题,问题大概就是有一块缓冲区作为仓库,当仓库未满时生产者可以将产品放入仓库,当仓库未空时消费者可以从仓库取走产品。解决这个问题的核心就是处理好多线程之间的同步与协作。 生产者消费者的实现方式通常有以下几种方式来实现生产者与消费者模型: BlockingQueue 阻塞队列 wait()

Read More...


在多线程的学习当中,有许多经典的例子值得学习,比如售票窗口、线程交替执行、生产者消费者等。下面就来看两个有关线程交替执行的案例。 两个线程轮流打印数字这里采用 wait/notify 等待通知和 Lock/Condition 两种方式实现。 wait()/notify()实现简单介绍一下wait/notify机制的几个方法。以下4个方法都必须在获取了锁的情况下才能调用: wait(): 使当前线程进入阻塞等待状态,直到被唤醒或中断;

Read More...


ThreadLocal的简介ThreadLocal称为线程局部变量。在每个线程中都有自己独立的ThreadLocal变量。每个线程中可有多个threadLocal变量。 ThreadLocal的用法12345678910111213141516171819202122232425262728public class ThreadLocalDemo { private static ThreadLocal<Integ

Read More...


介绍我们知道JDK动态代理只能代理实现了接口的类,没有实现接口的类是无法通过JDK来代理的。 Cglib是针对类来实现代理的,它的原理是对指定的目标类生成一个子类,这个子类覆盖目标类的方法并在其中实现方法的增强。因为采用了继承和重写,因此不能对final的类、final方法进行代理。 Cglib底层其实是借助了ASM这个非常强大的Java字节码生成框架,它可以在运行时对字节码进行修改或动态生成。 实现目标对象12345public

Read More...


JDK动态代理简介什么是JDK动态代理?先看看代理的概念——代理:为其他对象提供一种代理以控制对这个对象的访问。 代理在生活中很常见,比如买火车票可以不去火车站,而是通过代售点;想要逃课了,就让同学代签到等等。说白了,就是可以通过代理来完成目标事件。(自我理解) 不同于静态代理直接采用编码的方式实现,JDK动态代理是利用反射机制在运行时创建代理类,进而调用相应的方法。 JDK动态代理的使用通过一个小例子来看看如何使用JDK动态代理。

Read More...


基数排序基数排序是一种基于分配的排序(空间换时间),不同于常见的基于比较的排序(冒泡、快排、归并…等)。 基于比较的排序时间复杂度通常是O(n^2)或者O(nlogn),下限是O(nlogn); 基于分配的排序算法的时间复杂度可以达到O(n),但需要消耗额外空间; 在某些时候,基数排序的效率高于其它基于比较的排序算法(快排、归并等)。 原理原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。进行了c次(c是整数的位数)比

Read More...


单例模式定义单例模式是设计模式的一种,为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。 特点 单例类保证只有一个实例(构造函数私有化) 单例类自己创建自己 单例类必须为其他对象提供访问唯一实例的方法 应用 配置类信息 Java中的Runtime类 线程池的设计一般也是采用单例模式 单例模式的实现有饿汉模式、懒汉模式(多种)、静态内部类、枚举类等多种实现方式。 饿汉模式12345678910public class Sing

Read More...


IO相关概念同步和异步同步:发出一个调用后,在没有得到结果之前,该调用就不会返回。当调用返回时,就能得到返回结果。(调用者主动等待结果) 异步:发出一个调用后,这个调用就返回了,没有返回结果。(调用者被动等待结果,会得到通知) 阻塞与非阻塞阻塞:某个请求发出后,如果不满足请求需要的条件,那么就会一只等待,直到满足条件。 非阻塞:某个请求发出后,如果不满足请求需要的条件,则立即返回一个标志信息告知条件不满足,而不会一直等待。一般需要通过循

Read More...


简单工厂模式定义简单工厂模式又叫静态工厂方法模式。通过定义一个工厂类,根据传入的不同参数,创建不同的实例对象。这些实例对象具有共同的父类或接口。 实现123456789101112131415161718192021222324252627282930//抽象产品public interface Product { public void productName();}//具体产品public class Pr

Read More...


ActiveMQ结合Spring收发消息直接使用ActiveMQ的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更加简便的方式————Spring JMS ,通过它可以更加方便地使用ActiveMQ。 Maven 依赖结合Spring使用ActiveMQ的依赖如下:1234567891011121314151617181920212223<!-- Spring JMS --><dependency>

Read More...


人生如逆旅,我亦是行人。