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成员变量 的同步问题?共享内存?
不管它,让容器自己管理?
同步问题首先要考虑是否原子型atomic,象
public static int fieldsX2
就是原子型,不需要同步,long 和double则是非同步,写法:
public static volatile long fieldsX2
volatile就保证了线程内存和主内存一致了。
关于方法,尽量不要使用同步,需要同步时,一定要理解方法中执行的过程。你举例的方法yy 表明你好像没有理解方法的同步。
猜你喜欢
本站原创《复杂软件设计之道:领域驱动设计全面解析与实战》