[Logo] Terracotta Discussion Forums (LEGACY READ-ONLY ARCHIVE)
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
[Expert]
static String 对象集群问题  XML
Forum Index -> Terracotta 中文社区
Author Message
zhuxinping

journeyman

Joined: 11/02/2009 19:15:41
Messages: 11
Offline

我对static String 对象进行集群时,发现该static String的值不能修改。
代码:
package Demo;
public class Main3 {
private static Object o = new Object();
public static String field = "A";

public static void main(String args[]) throws Exception {
int i = 1;
while (true) {
synchronized (o) {
field = field + i;
System.out.println(field + ":field值");
Thread.sleep(5000);
i++;
}
}
}
}

tc-config.xml
<dso>
<instrumented-classes>
<include>
<class-expression>*..*</class-expression>
</include>
</instrumented-classes>

<roots>
<root>
<field-name>Demo.Main3.field</field-name>
</root>
</roots>
<locks>
<autolock auto-synchronized="false">
<method-expression>* Demo.Main3.main(..)</method-expression>
<lock-level>write</lock-level>
</autolock>
</locks>
</dso>

输出结果
A:field值
A:field值
A:field值
A:field值

将field类型改成int型则是可以集群修改的。
请问Terracotta对String 及引用类 如何集群?谢谢!
lima

consul
[Avatar]
Joined: 06/22/2009 10:12:31
Messages: 361
Offline

一般来说,用基本类型作为root不是一个建议的方法。
Java基本数据类型是可以作为root的,并且也可以修改。
但是String何其它对象类型是不可以修改的。但是对象的数据成员可以被修改。

所以如果你需要修改一个共享的字符串,可以定义一个类,让这个字符串作为该类的一个成员。比如:
Class MyData{
private String name;
public String getName(){..}
public void setName(String str) {...}
}

目前我们网站上说String是Literal类型,可以作为root被修改。这个说法有些问题。我们正在更新网站的说明。
 
Forum Index -> Terracotta 中文社区
Go to:   
Powered by JForum 2.1.7 © JForum Team