- 浏览: 9529 次
最新评论
文章列表
记录下RSA 工具类,提供加密,解密,签名,生成密钥对等方法,以便以后使用。
import java.io.File;
import java.io.IOException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import ja ...
ServiceLoader是jdk提供的一个简单的服务提供者加载设施,一个服务(接口)的实现者在其资源目录META-INF/services 中放置提供者配置文件 来标识服务提供者。
文件名称是服务类型的完全限定名称。该文件包含一个具体提供者类的完全限定名称列表,每行一个。
通过ServiceLoader.load创建服务实现者加载器,通过iterator以延迟方式加载此加载器服务的可用提供者。
本帮助类对ServiceLoader的功能进行了增强:
1.对加载到的服务提供者进行缓存,避免重复加载。
2.提供一种按key/value的方式来配置服务提供者,按key来获取具体服务 ...
JVM工具类,提供jstack jmap memory等信息的输出.
import java.io.File;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
import java.util.Iterator;
impo ...
spring ApplicationContext获取方式:
1.通过配置文件,获取ApplicationContext。
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明: 这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
2.通过Spring提供的工具类获取ApplicationContext对象
代码 ...
开发中经常要使用Base64对字符串进行编码,记录下Base64的工具类。
import java.io.UnsupportedEncodingException;
public final class Base64 {
static private final int BASELENGTH = 128;
static private final int LOOKUPLENGTH = 64;
static private final int TWENTYFOURBITGROUP = 24;
...
1.proxy代理模式
代理模式为其他对象提供一种代理,并以控制对这个对象的访问。通过代理可以实现对象的延迟加载和对象的访问控制,在具体调用的前后执行特殊处理或者是完全改变具体实现。代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
代理模式结构图如下:
2.java动态代理
jdk通过InvocationHandler和Proxy来实现对接口的动态代理,cglib用于对具体类实现动态代理,其内部是通过创建具体类的子类来实现动态代理的,所以不支持对final类及final方法动态代理,对final类动态代理会报:ja ...
Atomic是指不能分割成若干部分的意思。如果一段代码被认为是 Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中 断 ...
一、阻塞队列BlockingQueue
BlockingQueue 是线程安全的java阻塞队列,主要应用于生产者消费者模式、消息传递、并行任务执行和相关并发设计的大多数常见使用上下文。
BlockingQueue 可以是限定容量的。它在任意给定时间都可以有一个 remainingCapacity,超出此容量,便无法无阻塞地 put 附加元素。没有任何内部容量约束的 BlockingQueue 总是报告 Integer.MAX_VALUE 的剩余容量。
BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四 ...
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。框架结构图如下:
使用Executor来执行多个线程的好处是用来避免线程的创建和销毁的开销,以提升效率。因此如果某些场景需要反复创建线程去处理同类事务的话,可以考虑使用线程池来处理。
一、创建ExecutorService
Executors类,提供了一系列工厂方法用于创先线程池,返 ...
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,可以支持多个相关的 Condition对象。使用最多的Lock类是ReentrantLock、ReentrantReadWriteLock.ReadLock、ReentrantReadWriteLock.WriteLock。
synchronized 方法或语句的使用提供了对与每个对象相关的隐式监视器锁的访问,但却强制所有锁获取和释放均要出现在一个块结构中:当获取了多个锁时,它们必须以相反的 ...
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。Volatile 变量具 ...
在Java多线程编程中,wait()、notify()、notifyAll()这三个方法,都是Java语言提供的实现线程间阻塞(Blocking)和控制进程内调度(inter-process communication)的底层机制。Java内任何对象都能成为锁(Lock),同时任何对象也都能成为条件队 ...
ThreadLocal提供了线程局部 (thread-local) 变量,访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量(变量值的副本),它独立于变量的初始化副本,是Java中一种较为特殊的线程绑定机制,是每一个线程 ...
synchronized关键字用于解决线程同步,其可以用于方法和代码段,锁定的都是对象,范围是实例对象或类对象。每个对象有且只有一个锁与之相关。
锁提供了两种主要特性:互斥(原子性)(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或 ...
ChannelBuffer是netty自己的缓冲区,用于替代nio的Buffer,这种替代具有显著的优势,解决了Buffer存在的一些问题,满足了日常网络应用程序开发的需求。具有以下特点:
如果必要的话,可以定义自己的ChannelBuffer。
通过复合缓冲区CompositeChannelBuffer实现透明的零拷贝”Zero-Copy-Capable”。
提供了一个开箱即用的动态缓冲区DynamicChannelBuffer,其容量可动态扩大,就像StringBuffer。
不用在使用flip()进行读写反转了。
通常比ByteBuffer快。
...