为什么可以';我不能在java中同步实例块吗?

为什么可以';我不能在java中同步实例块吗?,java,multithreading,synchronization,Java,Multithreading,Synchronization,当我试着跟随 public class Test { synchronized(this){ // compiler complains here System.out.println("instance block"); } public static void main(String [] args){ } } 同步实例块不就是同步语句块吗 谢谢, Bharat为什么不在内部同步: public class Test {

当我试着跟随

public class Test {

    synchronized(this){   // compiler complains here
        System.out.println("instance block");
    }

    public static void main(String [] args){

    }

}
同步实例块不就是同步语句块吗

谢谢,
Bharat

为什么不在内部同步:

public class Test {

    {
        synchronized(this) {
            System.out.println("instance block");
        }
    }

    public static void main(String [] args){

    }

}

为什么不在内部同步:

public class Test {

    {
        synchronized(this) {
            System.out.println("instance block");
        }
    }

    public static void main(String [] args){

    }

}
同步实例块不就是同步语句块吗

好吧,不,因为它不仅仅是一个“语句块”,而是一个实例初始值设定项。如果要同步块执行,可以始终在初始化器内的
this
引用上同步。另外,我认为您不能在顶级块上进行同步(方法块对此有特殊的语法支持,您已经知道)

同步实例块不就是同步语句块吗

好吧,不,因为它不仅仅是一个“语句块”,而是一个实例初始值设定项。如果要同步块执行,可以始终在初始化器内的
this
引用上同步。另外,我认为您不能在顶级块上进行同步(方法块对此有特殊的语法支持,您已经知道)


因为在静态初始值设定项块中没有这个

该块在加载类定义时执行,而不是在创建实例时执行

没有必要在静态init块中进行同步,因为在获得控制之前,加载类由jvm处理


简而言之,保持块和移除同步(this)

,因为在静态初始值设定项块中没有this

该块在加载类定义时执行,而不是在创建实例时执行

没有必要在静态init块中进行同步,因为在获得控制之前,加载类由jvm处理


简言之,保持块和移除同步(this)

而您可以在实例初始化器块或构造函数中同步(this),这总是毫无意义的,因为在此阶段不会共享对象。i、 e.只有一个线程可以访问


您可以在构造函数期间使一个对象可供多个线程使用,但这通常被认为是一种不好的做法。

虽然您可以在实例初始化器块或构造函数中进行同步(this),但它始终是无意义的,因为在此阶段不会共享对象。i、 e.只有一个线程可以访问


在构造过程中,可以使一个对象对多个线程可用,但这通常被认为是一种不好的做法。

您实际上涉及到了语言推理的一部分。据说构造函数(初始化器块所属)不需要同步,因为构造函数总是从单个线程调用的。另一个调用只会创建另一个实例


但是,由于构造函数实际上可以将资源泄漏给其他实例,因此允许使用内部同步块来允许正确的同步

你实际上触及了语言推理的一部分。据说构造函数(初始化器块所属)不需要同步,因为构造函数总是从单个线程调用的。另一个调用只会创建另一个实例


但是,由于构造函数实际上可以将资源泄漏给其他实例,因此允许使用内部同步块来允许正确的同步

为什么你认为这应该首先起作用呢?它说在标记“{”上出现语法错误,在这个标记之后应该出现“{”。记住,在java中,每一条指令都必须在一个方法中。这可能是该站点最好的壮举:一个人可以读到惊人的东西(尽管不合逻辑)关于人们的想法。为什么你认为这应该首先起作用?它说,在标记“{”之后,应该出现语法错误,{。记住,在java中,每个指令都必须在一个方法中。这可能是该网站最好的壮举:人们可以读到惊人的东西(尽管不合逻辑)我猜你误读了这个问题,它不是关于静态初始值设定项而是关于实例的。我猜你误读了这个问题,它不是关于静态初始值设定项而是关于实例的。