1 java multithreading synchronization
这里的问题是同步不起作用.我的另一个线程甚至在我的第一个线程在synchronized块中完成执行之前就被执行了.当我传递"someClass.class"时,它工作正常.也许我的说法不对,或者我的程序有些错误.
主要:
public class Main {
public static void main(String[] args) {
SharedObject object = new SharedObject();
ClassA t1 = new ClassA("Thread 1", object);
ClassA t2 = new ClassA("Thread 2", object);
t1.start();
t2.start();
}
}
Run Code Online (Sandbox Code Playgroud)
共享对象:
class SharedObject {
volatile int value = 10;
}
Run Code Online (Sandbox Code Playgroud)
ClassA的:
class ClassA extends Thread{
SharedObject object;
int data;
public ClassA(String name, SharedObject object) {
super(name);
this.object = object;
}
@Override
public void run() {
name();
}
public void name() {
synchronized (this) {
if(getName().equals("Thread 1")){
System.out.println("Before modifying "+getName()+" value = "+object.value);
object.value = 100;
System.out.println("After modifying "+getName()+" value = "+object.value);
data = object.value;
}else{
System.out.println("Before modifying "+getName()+" value = "+object.value);
object.value = 200;
System.out.println("After modifying "+getName()+" value = "+object.value);
data = object.value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
计划的输出:
Before modifying Thread 2 value = 10
Before modifying Thread 1 value = 10
After modifying Thread 2 value = 200
After modifying Thread 1 value = 100
Run Code Online (Sandbox Code Playgroud)
请帮助我理解这一点.
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |