论坛首页 Java企业应用论坛

多线程设计模式 -- immutable

浏览 5379 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-07-09  
这个例子不能说明多线程对数据的操控。
有空去看看多线程下的数据结构,现在这块还不是成熟技术。
0 请登录后投票
   发表时间:2009-07-09  
zhengban 写道
这个例子不能说明多线程对数据的操控。
有空去看看多线程下的数据结构,现在这块还不是成熟技术。

可能是我技术有限 我也没看出 多线程对数据的操控
0 请登录后投票
   发表时间:2009-07-09   最后修改:2009-07-09
whaosoft 写道
zhengban 写道
这个例子不能说明多线程对数据的操控。
有空去看看多线程下的数据结构,现在这块还不是成熟技术。

可能是我技术有限 我也没看出 多线程对数据的操控

这是一种模式,如果你在多线程要利用一个共享数据对象作相关断.而这个数据对象实例化后又不需要改变.就可以用这个模式.因为这个数据对象是绝对安全的.多线程下不会去修改这个数据对象.
我们同步一个方法同时只让一个线程访问的主要作用也就是不能多个线程同时修改类变量.
而这个数据对象的类变量全部都是final 实例化后就无法修改了.所有就不用同步相关的方法.提交执行的效率.

如果你在删除这个共享数据类变量的final加上相关set方法.这个实例就可以修改了,同时在多线程也是不安全的了.如果方法不是同步的.同时两个线程访问这个方法.同时两个线程式都修改这个共享数据的变量值,那么是不是不安全的.所以要同步这个方法.

jdk 中 Integer ,Boolean 等一些包装类都是利用这个模式,你们可以去看看源代码.


package java.lang;
public [color=red]final[/color] class Boolean implements java.io.Serializable,
                                      Comparable<Boolean>
{
    
    public static final Boolean TRUE = new Boolean(true);

    public static final Boolean FALSE = new Boolean(false);

    public static final Class<Boolean> TYPE = Class.getPrimitiveClass("boolean");

    private [color=red]final[/color] boolean value;

    private static final long serialVersionUID = -3665804199014368530L;

    
    public Boolean(boolean value) {
	this.value = value;
    }

       public Boolean(String s) {
	this(toBoolean(s));
    }

      public static boolean parseBoolean(String s) {
        return toBoolean(s);
    }

       [color=red]public boolean booleanValue() {
	return value;
    }[/color]

        public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }

        public static Boolean valueOf(String s) {
	return toBoolean(s) ? TRUE : FALSE;
    }

   
    public static String toString(boolean b) {
        return b ? "true" : "false";
    }

       public String toString() {
	return value ? "true" : "false";
    }

        public int hashCode() {
	return value ? 1231 : 1237;
    }

       public boolean equals(Object obj) {
	if (obj instanceof Boolean) {
	    return value == ((Boolean)obj).booleanValue();
	} 
	return false;
    }
    public static boolean getBoolean(String name) {
        boolean result = false;
        try {
            result = toBoolean(System.getProperty(name));
        } catch (IllegalArgumentException e) {
        } catch (NullPointerException e) {
        }
        return result;
    }

       public int compareTo(Boolean b) {
        return (b.value == value ? 0 : (value ? 1 : -1));
    }

    private static boolean toBoolean(String name) { 
	return ((name != null) && name.equalsIgnoreCase("true"));
    }
}
0 请登录后投票
   发表时间:2009-07-09  
我只想说我晕~~~
0 请登录后投票
   发表时间:2009-07-09  
乍一看,有些道理,
可是仔细一想,lz的大方向就错了,
因为你先设计`不变模式`,后用到多线程中的。
但是在实际中是现有现实需求,而在需求中你就不能保证:类是`不变模式`的了!

所以,我认为你是先设计不变类,然后硬套到多线程编程中,但是没有实际意义,因为在实际中不能保证这一点。
0 请登录后投票
   发表时间:2009-07-09  
运动设计模式 - 四轮

四轮总比两轮和三轮快。
0 请登录后投票
   发表时间:2009-07-09  
liangguanhui 写道
运动设计模式 - 四轮

四轮总比两轮和三轮快。


生物运动设计模式 - 蜈蚣

在某些腿脚受损情况下依然正常行走
0 请登录后投票
   发表时间:2009-07-09  
liangguanhui 写道
运动设计模式 - 四轮

四轮总比两轮和三轮快。


google 了一下没有找到相关资料能提供一下吗?
0 请登录后投票
   发表时间:2009-07-09  
我承认,我没看懂...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics