Java守护线程

在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)

  • Daemon的作用是为其他线程的运行提供便利服务,比如垃圾回收线程就是一个很称职的守护者。User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了。值得一提的是,守护线程并非只有虚拟机内部提供,用户在编写程序时也可以自己设置守护线程。下面的方法就是用来设置守护线程的。public final void setDaemon(boolean on)

阅读全文

JAVA简单工厂模式

简单工厂模式 SimpleFactory,又称 静态工厂方法模式(StaticFactory Method);

  • 优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

  • 缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;这些缺点在工厂方法模式中得到了一定的克服。

阅读全文

JAVA单例模式

Java 的单例模式,即保证在Java应用程序中,一个Java类只有一个实例存在;单例模式可分为饿汉式、懒汉式及登记式(不常用,只做了解即可);常用的场景:读取配置文件类、工具类、线程池、缓存、日志对象等。

饿汉式

/** 
 * @author effine 
 * @date 2013-9-9  下午11:23:42
 */  
package cn.effine.singleton;  
/* 单例模式:饿汉式 */  
public class HungrySingleton {  
    /* 饿汉式单例模式, 声明的同时初始化对象 */  
    private static HungrySingleton hungry = new HungrySingleton();  
    /* 构造方法设置成privae,不允许外部实实例化 */  
    private HungrySingleton() {  
    }  
    /* 返回一个单态模式的类的实例 */  
    public static final HungrySingleton getInstance() {  
        return hungry;  
    }  
}  

单例之饿汉式:对象预先加载,线程安全;在类创建的同时生成单例对象,调用时获得对象实例的方法反应速度快,代码简练。

阅读全文

JAVA观察者模式

Java观察者模式(Observer Pattern),简单说观察者模式包含四种角色:抽象被观察者角色、具体被观察者角色、抽象观察者角色和具体观察者角色;

针对观察者与被观察者设定场景:每天我们关心的天气预报统一由中国气象局发布(被观察者),每个发布气象平台(观察者)订阅中国气象局;天气发生变化气象局发布通知给各个平台,然后平台做相应的更新操作。当然,现实中该场景是不存在的,权宜是为了加深理解Java观察者模式而生,因为气象局是不会去通知各个订阅平台,更新操作是各个平台定时刷新完成。

其中Java本身提供观察者模式的接口供开发者使用,在 java.util包下,包含接口Observer及类Observable,接口Observer是扮演抽象观察者角色,包含一个update()方法,而类Observable则扮演抽象被观察者角色,开发者只需要继承该类就能很好的运用观察者模式。闲话少说,贴出代码以供参考:

抽象被观察者角色

/** 
 * @author effine 
 * @date 2013年10月4日  下午11:02:21 
 */  
package cn.effine.observer;  
/* 抽象被观察者角色 */  
public interface IWitched {  
    /* 添加观察者 */  
    public void addWitcher(IWitchers w);  
    /* 删除观察者 */  
    public void deleteWitcher(IWitchers w);  
    /* 被观察者 发生变化,通知观察者 */  
    public void notifyWitcher(Object o);  
}

阅读全文