首页 > 解决方案 > 在多线程中的java中工作的同步块

问题描述

我有一个关于 post Synchronized block not working的问题,下面的代码正在打印“Hello Java”……。obj1 和 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(); 
    } 
}

标签: javamultithreadingsynchronized

解决方案


您只打印x并且y它们是synchronized块状的,因此它打印的是相同的值。添加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(); 
    } 
}

推荐阅读