Java中的同步上下文是什么

发布于 2024-11-26 12:36:57 字数 397 浏览 1 评论 0原文

大家都知道 Java 中的同步上下文可以位于

  • 实例上。
  • 在某个加载的类的 java.lang.Class 实例上。
  • 在给定的对象上

我需要问;当我编写

Dimension d = new Dimension();

synchronized(d){
  // critical atomic operation
}

给定对象的同步实际上等于实例上的同步时。

因此,当我编写 synchronized(d) (其中 d 是对象的实例)时,线程将获得所有同步实例代码块的锁。

您能给我有关同步上下文的更多详细信息吗?

您的回复将不胜感激。

All of you know the synchronization context in Java that they are can be

  • on the instance.
  • on the java.lang.Class instance for a certain loaded class.
  • on a given object

And I need to ask; When i write

Dimension d = new Dimension();

synchronized(d){
  // critical atomic operation
}

synchronization of a given object equal to synchronization on the instance practically.

so when I write synchronized(d) where d is an instance of object, then the thread will gain the lock for all synchronized instance block of code.

Can you please give me more details about synchronization context.

Your replies will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

街角卖回忆 2024-12-03 12:36:57

synchronized 关键字提供对其引入的代码块(可能是整个方法)的串行访问。访问的序列化是通过使用对象作为互斥锁来完成的。

synchronized 的三种基本用途是:

A. 在静态方法上:

static synchronized void someStaticMethod() {
   // The Class object - ie "MyClass.class" - is the lock object for this block of code, which is the whole method
}

B. 在实例方法上:

synchronized void someInstanceMethod() {
   // The instance - ie "this" - is lock object for this block of code, which is the whole method
}

C. 在任意代码块上:

private Object lock = new Object();
void someMethod() {
    synchronized (lock) {
        // The specified object is the lock object for this block of code
    }
}

在所有情况下,一次只能有一个线程进入同步块。

在所有情况下,如果同一个锁对象用于多个块,则只有一个线程可以进入任何同步块。例如,如果有两个同时调用这些方法的线程将阻塞,直到第一个线程退出该方法。

The synchronized keyword provides serial access to the block of code (which could be an entire method) it introduces. Serialization of access is done by using an object as a mutex lock.

The three basic uses of synchronized are:

A. On a static method:

static synchronized void someStaticMethod() {
   // The Class object - ie "MyClass.class" - is the lock object for this block of code, which is the whole method
}

B. On an instance method:

synchronized void someInstanceMethod() {
   // The instance - ie "this" - is lock object for this block of code, which is the whole method
}

C. On an arbitrary block of code:

private Object lock = new Object();
void someMethod() {
    synchronized (lock) {
        // The specified object is the lock object for this block of code
    }
}

In all cases, only one thread at a time may enter the synchronized block.

In all cases, if the same lock object is used for multiple blocks, only one thread may enter any of the synchronised blocks. For example, if there are two - other simultaneous threads calling the methods will block until the first thread exits the method.

清晰传感 2024-12-03 12:36:57

将synchronized 关键字应用于非静态方法是简写形式:

public void method() {
    synchronized(this) {
        // method
    }
}

如果将synchronized 应用于静态方法,那么它会在调用该方法时锁定类对象(MyClass.class)。

Applying the synchronized keyword to a non-static method is shorthand for:

public void method() {
    synchronized(this) {
        // method
    }
}

If you apply synchronized to a static method, then it locks the class object (MyClass.class) whilst the method is called.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文