1线程 – > 1类 – Foo类没有问题.
X线程 – > 1个实例 – 类Foo ==需要处理这是很清楚的.
X线程 – > X的各个实例 – 类Foo == ????
我应该确保在方法中没有什么混乱吗?
如果方法使用实例级变量,我可以确定它会使用正确的变量吗?
更新:
我看到我的问题不清楚一些,这里是一个数字的例子
我有一个没有同步的类Foo的对象!
我有5个Foo实例,5个线程在每个线程中运行,并访问实例级参数,例如:
class FOO { private SomeObject someObject=new SomeObject(); private void problematicMethod(Data data) { someObject.doSomethingWithTheData(data); data.doSomethingWithSomeObject(someObject); // any way you want it use the data or export the data } }
我在问这里是否有一个问题,因为这个类只有1个字节的代码,这个对象的5个实例访问这个字节代码,所以如果我想防止它们在同一个字节代码上重叠,那我该怎么办做?
谢谢,
亚当.
解决方法
I’ve learned that every class byte code is been loaded to the memory once for each class loader,thus when a thread is executing the byte code of some method,and another thread comes along?
类加载和字节码在这里是无关紧要的.字节代码是JVM解释并编译为本地机器代码的一组类似于Assembly的指令.多个线程可以安全地遵循编码为字节码的指令集.
1 thread -> 1 instance – of class Test,no problem
大部分是正确的如果只有一个线程,那么没有任何立即需要使任何线程安全.然而,忽视线程安全将限制增长和重新使用.
X threads -> 1 instance – of class Test,need to be handled this is clear.
那么是的,对于线程可见性原因,并确保关键区域是原子执行的,使用同步或锁定技术是非常重要的.当然这一切都取决于吗?如果你的类没有状态(实例或类变量),那么你真的不需要使其线程安全(认为实用程序类,如Java的Executors,Arrays,Collections类).
X threads -> X respective instances – of class Test,????
如果每个线程都有自己的Test类,并且没有单个实例在多个线程之间共享,那么这与第一个例子是一样的.如果Test的一个实例被两个或多个线程引用,那么与第二个例子相同.
if the method uses a class level variables,can I be sure it will use the right ones?
类变量是Java中的静态变量.已经发布了两个答案,强调使用synchronized来防止多个线程同时修改类变量的重要性.没有提到使用synchronized或volatile的重要性,以确保您看不到类变量的陈旧版本.