所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

java synchronized锁对象,当对象引用是null的时候,锁的是什么?

发布时间:2020-04-12 08:46:45

资讯分类:java  对象  obj  null  同步  线程  方法
java synchronized锁对象,当对象引用是null的时候,锁的是什么?

谢谢邀请

在Java中,同步的代码块一次只能由一个线程执行。此外,java支持多个线程同时执行。这可能导致两个或多个线程同时访问相同的字段或对象。

同步是使执行中的所有并发线程保持同步的过程。同步可避免由于共享内存视图不一致而导致的内存一致性错误。当方法声明为synchronized时 ; 该线程持有监视器或锁定对象为这个方法的对象。如果另一个线程正在执行synchronized方法,则您的线程将被阻塞,直到该线程释放监视器。

请注意,我们可以在类中使用关键字来定义方法或块。关键字不能与类定义中的变量或属性一起使用。

使用synchronized锁 需要注意下面几个方面

  1. Java中的同步保证没有两个线程可以同时或同时执行同步方法,这需要相同的锁定。
  2. keyword只能用于方法和代码块。这些方法或块可以是静态的还是非静态两种。
  3. 当线程进入Java 方法或阻塞时,它获取一个锁,每当它离开同步方法或阻塞时,它就会释放锁。即使线程在完成后或由于任何错误或异常而离开同步方法,锁也会被释放。
  4. Java 关键字本质上是可重入的,这意味着如果同步方法调用另一个需要相同锁定的同步方法,那么持有锁定的当前线程可以在不获取锁定的情况下进入该方法。
  5. 如果synchronized块中使用的对象为null,则抛出Java同步。例如,在上面的代码示例中,如果将lock初始化为null,则将抛出“ ” 。
  6. Java中的同步方法会为您的应用程序带来性能成本。因此,在绝对需要时使用同步。另外,请考虑使用同步代码块来仅同步代码的关键部分。
  7. 静态同步和非静态同步方法可能同时或同时运行,因为它们锁定在不同的对象上。
  8. 根据Java语言规范,您不能将关键字与构造函数一起使用。这是非法的,会导致编译错误。
  9. 不要在Java中的同步块上的非最终字段上进行同步。因为非最终字段的引用可能随时改变,然后不同的线程可能在不同的对象上同步,即根本不同步。最好是使用String类,它已经是不可变的并且声明为final。
本人大厂程序员 喜欢的可以关注我
java synchronized锁对象,当对象引用是null的时候,锁的是什么?

首先,了解一下synchronized。

synchronized

它是java的同步锁关键字,一般有四种用法:

  1. 锁代码块

  2. 锁对象

  3. 锁方法

  4. 锁类

锁对象示例:

synchronized (a) { a= a+ 1}

锁代码块示例:

synchronized(this) { a = a + 1; }

锁方法示例:

private synchronized int add(int a){}

锁类示例:

synchronized (AClazz) { a = a+1 }

根据阿里巴巴Java开发手册,同步锁需要消耗很大的性能,所以在达到相同目的的情况下:

  1. 无锁优先于锁

  2. 锁对象优先于锁类

  3. 锁代码块优先于锁方法

回到问题

java synchronized锁对象,当对象引用是null的时候,锁的是什么?它不会锁任何对象,因为当使用synchronized锁null时,它会抛出NullPointerException。

java synchronized锁对象,当对象引用是null的时候,锁的是什么?

谢邀!

Java语言规范中明确指出如果锁住的对象是null,则会NullPointerException,规范内容如下:

The type of Expression must be a reference type, or a compile-time error occurs. A synchronized statement is executed by first evaluating the Expression. Then: If evaluation of the Expression completes abruptly for some reason, then the synchronized statement completes abruptly for the same reason. Otherwise, if the value of the Expression is null, a NullPointerException is thrown.

java synchronized锁对象,当对象引用是null的时候,锁的是什么?

锁个空指针给你

java synchronized锁对象,当对象引用是null的时候,锁的是什么?

会crash

留言与评论(共有 0 条评论)
   
验证码:
Top