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