Raj*_*mar 0 java multithreading thread-safety
我读了jakob jenkov州的教程,
public void someMethod(){
LocalObject localObject = new LocalObject();
localObject.callMethod();
method2(localObject);
}
public void method2(LocalObject localObject){
localObject.setValue("value");
}
Run Code Online (Sandbox Code Playgroud)
是线程安全的.但我觉得
public class LocalObject extends Thread {
public void run(){
//LocalObject a= new LocalObject();
method2(this);
}
public void someMethod(){
LocalObject localObject = new LocalObject();
localObject.callMethod();
method2(localObject);
}
public void method2(LocalObject localObject){
localObject.setValue("value");
}
public void setValue(String s){
}
public void callMethod(){
}
public static void main(String args[]){
LocalObject a= new LocalObject();
a.start();
a.method2(a);
}
}
Run Code Online (Sandbox Code Playgroud)
是不是线程线程安全,因为两个线程1. main&2 LocalObject.的线程正在访问method2,它有一个方法setValue
我误解了它?
误解源于这样一个事实,即虽然有两个线程同时调用mathod2(),但它们在类的不同实例上调用LocalObject:
public void run(){
LocalObject a= new LocalObject(); //this is a new instance
method2(a);
}
public static void main(String args[]){
LocalObject a= new LocalObject(); //this is an antirelz different instance
a.start();
a.method2(a);
}
Run Code Online (Sandbox Code Playgroud)
如果是这样的话
public void run(){
//YIKES - not thread safe -- method 2 can be called from outside!
method2(this);
}
Run Code Online (Sandbox Code Playgroud)
然后会有一个问题......但这不会与anz方式的例子有关.
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |