Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么同步方法不起作用?_Java_Multithreading - Fatal编程技术网

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

Java 为什么同步方法不起作用?,java,multithreading,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 {

我正在使用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]
但同步在smhw中不起作用

请帮助。

两个错误:

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

“莫名其妙地”不拼写为“smhw”。除非你的键盘坏了,否则请不要省略元音。不要在
上同步此
,因为每个线程都有自己的实例,所以你什么也做不到。您必须在所有线程的同一个实例上进行同步。@user2737412:这就是问题所在。启动线程及其构造函数也是一种非常糟糕的方式。在我们进行此操作时,扩展thread类也是一种糟糕的方式。等等,我想我已经掌握了这个问题的诀窍……让我快速解决。谢谢你。。。我传递了我想要调用同步函数的对象…它工作了..因为对象是通过引用传递的:再次感谢