1 / 4
文档名称:

Java非线程安全类变线程安全类.doc

格式:doc   大小:26KB   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Java非线程安全类变线程安全类.doc

上传人:学习的一点 2021/7/25 文件大小:26 KB

下载得到文件列表

Java非线程安全类变线程安全类.doc

相关文档

文档介绍

文档介绍: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