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



我有一个关于帖子的问题 同步块不起作用,以下代码正在打印"你好 Java"....对象 1 和 OBJ2 为 20 次。此代码类似于帖子中给出的代码。

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

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(); 
} 
}

您只打印xysynchronized块,因此打印的值相同。添加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(); 
} 
}

您正在调用该 run(( 方法的 ThreadDemo 实例上获得一个锁。由于两个线程都使用相同的对象,因此同步块在这里工作。

最新更新