有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这样行吗?Synchronized(线程),然后synch块中的thread=null

我看到了:

// thread is a member of this class

synchronized( this.thread )
{
  this.thread.running = false;
  this.thread.notifyAll(); // Wake up anything that was .waiting() on
  // the thread
  this.thread = null;  // kill this thread reference.
  // can you do that in a synchronized block?
}

设置thread=null的同时仍然保持锁定状态可以吗

我在BB代码中找到了这个金块


共 (2) 个答案

  1. # 1 楼答案

    是的,很好。synchronized语句将获取其锁定的引用的副本,并使用该副本确定最后要解锁的内容

    Java语言规范的Section 14.19实际上并不清楚这一点,但它确实声明表达式在开始时进行了计算,并且没有提到以后再次进行计算

  2. # 2 楼答案

    只有当有一个块为线程分配新值时,才会出现问题。在这种情况下,您有一个竞争条件,因为两个块不会锁定在同一个对象上,但会更新同一个字段,并且最后分配值的块是随机的