IT Grey Wolf's Blog

The secret to getting ahead is getting started.

为什么说enum实现单例模式是最佳实践

为什么说Enum实现单例模式是最佳实践 众所周知,单例的实现有很多方式。从单例加载的时机区分,有懒汉模式、饿汉模式。而从实现方式区分有双重检查模式,内部类模式、Enum模式、Map模式等。在《Effective Java》中,作者提出利用Enum是实现单例模式的最佳实践。研究了下Enum反编译源码,就一切都清楚了。本文针对此问题做些总结。 内容概要 实现单例模式的几个关键点 利用...

Jdk动态代理

JDK动态代理源码解析 在Java中,动态代理使用的频率是很高的,比如Spring的AOP实现中就使用到了动态代理。作为一名有追求的码农,把这些基础搞清楚也是应该的。动态代理的实现方式有多种,各有特点,从JDK自带的动态代理,到CGLib、Javassist等。通常,动态代理用来给已有的接口实现增加通用的强化逻辑。 概要 本文主要涉及JDK动态代理的相关话题,包含以下内容: 什么是J...

Web服务器之rewrite功能

概念 URL Rewrite即URL重写,就是把传入Web的请求重定向到其他URL的过程。 为什么web服务器需要rewrite功能呢? 1.首先是满足观感的要求。 对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。形如http://www.123.com/news/index.asp?id=123的网页地址,自然是毫无美感可言,而用UrlRewrite技术,你可...

Java多线程系列之可见性

何为可见性? 在多线程的世界里,每个线程都有自己的工作内存,里面存储着各种变量。线程方法中的局部变量不会有同步的问题。但是,不同线程之间的共享变量就不一定了。最典型的共享变量就是某个类的静态成员。对于这些共享变量,每个线程都会把共享变量拷贝一份副本,因为JVM只允许线程修改自己工作内存中的变量值。换言之,不同线程变量之间的传递必须经过主内存。如下图: 这样一来,线程1如果修改了共享变量,...