Java 线程和同步块(synchronized block)

标签 java multithreading concurrency deadlock synchronized

假设我在某个线程中执行一个synchronized代码块,在synchronized block 中我调用了一个方法来生成另一个线程来处理一个同步代码块这需要与第一种方法相同的锁。所以在伪 Java 代码中:

public void someMethod() {
  synchronized(lock_obj) {
    // a whole bunch of stuff...

    // this is the last statement in the block
    (new Thread(someOtherMethod())).start();
  }
    // some more code that doesn't require a lock
}

public void someOtherMethod() {
  // some setup code that doesn't require a lock

  // return the stuff we want to run in another thread
  // that does require a lock
  return new Runnable() {
    @Override
    public void run() {
      synchronized(lock_obj) {
        // some more code
      }
    }
  };
}

我不知道如何理解该代码。我写的东西合法吗?在语法上我没有看到任何问题,但我不确定如何通过这样的代码进行推理。因此,当我执行 someOtherMethod() 以创建 Runnable 的实例时,返回语句运行之前的代码在什么样的范围内?它是否作为第一个同步块(synchronized block)的一部分执行?假设还有一些其他线程也在工作,可能需要锁定 lock_obj

最佳答案

在创建 runnable 和线程期间,您仍然持有锁,但在您调用 start 之后和线程实际启动之前,您将放弃锁。新线程将不得不与其他线程竞争锁。

关于Java 线程和同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295065/

相关文章:

java - 如何使用 POI SS 处理 HYPERLINK 功能?

java - 结果集的数据结构

c# - 将列表传递给线程

Java 并发性 - 最好是拥有带锁的线程列表或带请求列表的线程?

java - Swing 组件卡住,直到一个组件完成其工作

objective-c - 并发和 NSURLConnection

java - Firestore 更新 2 个不同的文档

c - C 中 pthread 的问题

java - (Java) 线程不会执行

java - 用Java计算递归函数