多个虚拟机如何做同步问题????

sim114 03-02-13


http://www.jdon.com:81/jive/thread.jsp?forum=121&thread=4653



banq
据我理解,局部变量包含两种:
一个类似int 之类的原始型变量
二是String之类的对象型变量;

如果是后者,容易发生deadlock,原因:
1线程正在占据A资源,等待B资源的释放;
2线程正在占据B资源,等待A资源的释放;



Danial
刚登陆进来浏览了一下,
我觉得这不是问题呀?局部变量不存在同步的问题。进入一个函数就分配压栈之类的, 出来就释放了,


同步问题:

public class xx{

public int fieldsX = 4;//inputInt 成员变量完全没问题
public static int fieldsX2 = 4;
//需要同步

public Factory fieldsF = new Factory();
//fieldsF 成员变量完全没问题
public static Factory fieldsF2;
//需要同步

static{
fieldsF2 = new Factory();
}


public Factory yy(Factory inputFactory,int inputInt){
//inputInt 原始型变量完全没问题,
//inputFactory 怎么说呢,传的是引用,
//如果改变它(inputFactory)的成员变量 需要同步,否则就不用了
int intLocal = 3;
//完全没问题
Factory factoryLocal;
if(){
factoryLocal = new Factory();
factoryLocal.mm = 23;
//完全没问题
return factoryLocal;
}
else{
factoryLocal = inputFactory;
synchronized(factoryLocal){
factoryLocal.mm = 23;
//需要同步
}
return factoryLocal;
}
}

}


不知以上说得对否?

一个问题:如果容器启动了多个虚拟机,很可能的,
如何做到 static成员变量 的同步问题?共享内存?
不管它,让容器自己管理?

banq
2003-02-13 16:10

同步前提都是一个虚拟机JVM

同步问题首先要考虑是否原子型atomic,象
public static int fieldsX2
就是原子型,不需要同步,long 和double则是非同步,写法:
public static volatile long fieldsX2
volatile就保证了线程内存和主内存一致了。

关于方法,尽量不要使用同步,需要同步时,一定要理解方法中执行的过程。你举例的方法yy 表明你好像没有理解方法的同步。