Java中同一对象的不同实例上的多线程

前端之家收集整理的这篇文章主要介绍了Java中同一对象的不同实例上的多线程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经知道,每个类加载器,每个类字节码都被加载到内存一次,因此当一个线程执行一些方法的字节码,另一个线程来了?

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的重要性,以确保您看不到类变量的陈旧版本.

猜你在找的Java相关文章