类加载器

import java.io.IOException; import java.io.InputStream; /** * 类加载器与instanceof演示 * */ public class ClassLoadTest { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { ClassLoader classLoader = new ClassLoader() { @Override public Class<?> loadClass(String name) throws ClassNotFoundException{ try { String fileName = name.substring(name.lastIndexOf(".")+1)+".class"; InputStream is = getClass().getResourceAsStream(fileName); if(is == null){ return super.loadClass(name); } byte[] b

java中final关键字的使用

final数据: 被final修饰的数据,如果是基本类型,那么它的值是恒定不变的;如果是对象引用,那么引用是恒定不变的,始终指向一个对象,但对

CountDownLatch 闭锁演示

import java.util.concurrent.CountDownLatch; /** * CountDownLatch 闭锁演示 * 闭锁的作用相当于一扇门:在闭锁到达结束状态(getCount()=0)前,这扇门一直是关闭的,并且没有任何线程能通过。 *

利用阻塞队列BlockingDeque实现生产者-消费者模式

消费者 import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; /** * 消费者类 * */ public class Consumer implements Runnable { private BlockingDeque<String> queue = new LinkedBlockingDeque<String>(); public Consumer(BlockingDeque<String> queue){ this.queue = queue; } @Override public void run() { // TODO Auto-generated method stub int i = 0; do{ try { String product = queue.take(); if(!"".equals(product) && null != product){ System.out

JAVA检测GC日志

只需要在JAVA程序运行的时候,加上VM参数就可以。像下面这样: -XX:+PrintGCDetails