2

I just wanted to be sure that I understood the following right.

  1. The synchronized keyword on methods forbids two such methods to be run simultaneously on one instance of the class.
  2. The synchronization object is the instance in question.

If this is true the following example should be right

class Example
{
  public synchronized void method1()
  {
    // mark 1 - never here when other thread at mark 2 or 4
  }

  public synchronized void method2()
  {
    // mark 2 - never here when other thread at mark 1 or 4
  }

  public void method3()
  {
    // mark 3 - may be (!) here when other thread at mark 1, 2 or 4
    synchronized (this)
    {
      // mark 4 - never here when other thread at mark 1 or 2
    }
  }
}

Thx for a 'yes' or falsification. b

2 Answers 2

3

Your understanding is correct.

Take a look at the following for further discussion: Avoid synchronized(this) in Java?

Sign up to request clarification or add additional context in comments.

1 Comment

your link is interesting, although 'dont use sync(this)' seems to me like the regular rule of thumb that is not universally true...
2

What you've said is correct.

And to add one thing, if the method is a static method, the Class is the lock.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.