Java 线程 - 同步代码

标签 java multithreading

为什么一定要指定,哪个对象锁定了一个同步代码块?

您不必指定哪个对象锁定了同步方法,因为它总是被“this”锁定(我相信)。

我有两个问题:

  • 为什么你不能使用非静态对象来阻止非静态方法 “这个”?
  • 为什么一定要指定被屏蔽的对象 同步代码?

我已经阅读了 SCJP for Java 6 的第九章,但我仍然不清楚这一点。

我意识到这可能是一个基本问题,但我是线程的新手。

最佳答案

Why can't you block a none static method with an object other than 'this' ?

您可以:

public void foo() {
    synchronized (lock) {
        ...
    }
}

Why do you have to specify the object that has blocked synchronized code?

因为这就是语言设计者选择设计语言的方式。 synchronized,当用在实例方法上时,隐含地使用 this 作为锁。 synchronized 在 block 上使用时必须明确指定锁。

关于Java 线程 - 同步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860465/

相关文章:

java - android studio 中的菱形断点和圆形断点有什么区别?

java - 维护线程安全,同时防止可能发生同步回调的死锁

c++ - 通过等待条件等待多个正在运行的线程

c++ - 为 tile 中的线程将数据复制到 tile_static

java - 线程中同步代码块的异常

java - Hibernate 具有不同值的同一对象

java - 应用引擎 : How to persist related entities using Objectify

java - 如何计算给定高度和压力的海平面压力

java - 从排序数组创建 BST 的大 Oh

java - 更改从不同线程提交到 ManagedExecutorService 的 Runnable 中的 CDI sessionscoped bean 会引发 ContextNotActiveException