为什么同步不起作用

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)

请帮助我理解这一点.

Bre*_*ken 5

您正在同步"this",但已创建了2个不同的ClassA实例.因此,同步发生在不同的对象上.