文档介绍:Java非线程安全类变线程安全类
一般来说非线程安全类是有状态的类,就是有属性的类。先看一个非线程安全类的例子:Java代码 package ; /** * 该类是非线程安全类,因为有一个共享变量state。 * * 原因:当多个线程使用同一个NotThreadSafe类的一个对象时, * 也会共享该对象的state属性,故是非线程安全的。 * * 也因为该类是非线程安全的,所以该类也不能作为单例对象。 * * 但是稍加改造也可以成为线程安全的,改造的方法有使用ThreadLocal,使用同步等等 * * 项目名称:ThreadSafeClass * 类名称:NotThreadSafe * 类描述:暂无 * 创建人:xueshishasha * 创建时间:2012-6-7 下午09:58:13 * 修改备注: * ***@version */ public class NotThreadSafe { private boolean state; public boolean checkState() { return isState(); } public boolean isState() { return state; } public void setState(boolean state) { = state; } } 下面就稍加改造变成线程安全类:
方法1:使用ThreadLocalJava代码 package ; /** * 该对象是一个线程安全的对象,他虽然有一个state属性,但是是放在ThreadLocal里的, * 也就是说表面上看state属性是属于本类的,其实是属于当前线程的。 * * 因为每个线程实际上拥有一个state的副本,因此,state属性是不共享的,除此之外,该类也没有其他的共享的属性, * 因此该类是线程安全的,可以作为单例对象。 * * * 项目名称:ThreadSafeClass * 类名称:ThreadSafeWi
thThreadLocal * 类描述:暂无 * 创建人:xueshishasha * 创建时间:2012-6-7 下午10:02:35 * 修改备注: * ***@version */ public class ThreadSafeWithThreadLocal { private final static ThreadLocal<Boolean> state = new ThreadLocal<Boolean>(); public ThreadSafeWithThreadLocal(boolean state) { (state); } public boolean che