为什么可以';我不能在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中,每个指令都必须在一个方法中。这可能是该网站最好的壮举:人们可以读到惊人的东西(尽管不合逻辑)我猜你误读了这个问题,它不是关于静态初始值设定项而是关于实例的。我猜你误读了这个问题,它不是关于静态初始值设定项而是关于实例的。