为什么同步方法不起作用?

时间:2013-09-01 14:07:47

标签: java multithreading

我正在使用synchronized语句并制作了以下程序...将runn类与此作为对象引用进行同步..bt smhw所需的输出是那里....

class runn extends Thread {
    String s;

    runn(String a) {
        s=a;
        start();
    }

     public void show() {
        System.out.print("["+s);
        try {
            sleep(50);
        } catch(Exception a){}

        System.out.print("]");
    }

    public void run() {
        synchronized(this) {
            show();
        }
    }
}

public class multi4 {

    public static void main(String[] args) throws InterruptedException{
        new runn("hello ");
        new runn("this is ");
        new runn("multithreading");
    }
}

输出应为:

[hello][this is][multithreading]

但同步无法正常工作

请帮忙。

1 个答案:

答案 0 :(得分:2)

两个错误:

  • synchronized对象runn。这没有任何效果,因为每个线程使用不同的同步对象。
  • synchronized关键字不会神奇地导致线程按顺序运行。它只是阻止线程同时尝试执行synchronized块,如果你在同一个对象上同步。它们仍然可以以任何顺序运行,但不能交错它们的输出。也就是说,如果您在共享对象上synchronized,则可以获得[this is][hello][multithreading],但不是[this is[hello][multithreading]]