同步块显示奇怪的结果

synchronized block showing weird results

我正在尝试 运行 java 中的一个简单的多线程程序,该程序在非静态 method.I 中使用 synchronized 块有一个 class TestThread 有一个字段 string 这是一个 StringBuffer 变量。我创建了两个线程 onetwo 并且它们的每个 string 变量都初始化为 StringBuffer b 其中包含值 A 。进入 运行ning 状态的第一个线程必须显示值 A 一百次,然后将其递增一个,以便下一个线程 运行ning 将显示递增的值 B 一百次 too.I 在 synchronized 中使用了由 this 表示的当前对象。但不幸的是我没有得到预期的输出。第一个线程显示 A 超过一百次,第二个线程显示 B 少于 100 次。每次我 运行 它,我都会变得不同 outputs.So 我想没有实现互斥。我在这里做错了什么?

    public class TestThread extends Thread{

        StringBuffer string;
        public void run(){
            synchronized(this){
                for(int i=0;i<100;i++){
                    System.out.print(this);
                }
                System.out.println();
                string.setCharAt(0,(char)(string.charAt(0)+1));
            }
        }

        public TestThread(StringBuffer string){
            this.string=string;
        }

        public String toString(){
            return string.toString();
        }

        public static void main(String args[]){
            StringBuffer b=new StringBuffer("A");
            TestThread one=new TestThread(b);
            TestThread two=new TestThread(b);
            one.start();
            two.start();
    }
    }

您正在锁定当前对象,即this。因此,您锁定了 2 个 不同的对象 。使用普通锁,然后尝试相同的示例。

synchronized(this) ==> synchronized(someGlobalObject)