在多线程中 java 工作的同步块

Synchronized block working in java in multithreading

我有一个关于 post Synchronized block not working 的问题,下面的代码正在打印“你好 Java” ...... obj1 和 obj2 的 20 次。此代码类似于 post.

中给出的代码

根据解释,下面的代码不应该也有不同的输出吗?有人可以帮助我了解两者之间的区别吗?

class ThreadDemo implements Runnable 
{ 
    String x, y; 
    public void run() 
    { 
        for(int i = 0; i < 10; i++) 
            synchronized(this) 
            { 
                x = "Hello"; 
                y = "Java"; 
              System.out.print(x + " " + y + " ");
            } 
    }

    public static void main(String args[]) 
    { 
        ThreadDemo run = new ThreadDemo (); 
        Thread obj1 = new Thread(run); 
        Thread obj2 = new Thread(run); 
        obj1.start(); 
        obj2.start(); 
    } 
}

您正在获取调用 运行() 方法的 ThreadDemo 实例的锁。由于两个线程都使用同一个对象,因此 Synchronized 块在这里工作。

您只打印 xy,它们位于 synchronized 块中,因此它打印相同的值。在 print 中添加 i 外部 synchronized 块,您会看到不同的输出。

class ThreadDemo implements Runnable 
{ 
    String x, y; 
    public void run() 
    {
        for(int i = 0; i < 10; i++) 
            synchronized(this)
            {
                x = "Hello";
                y = "Java";
              System.out.println(x + " " + y + " "+i);
            }
    }
    public static void main(String args[]) 
    { 
         ThreadDemo run = new ThreadDemo (); 
        Thread obj1 = new Thread(run); 
        Thread obj2 = new Thread(run); 
        obj1.start(); 
        obj2.start(); 
    } 
}