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

03-02-13 sim114

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 表明你好像没有理解方法的同步。