Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #3356

Re: A question about synchronized threads

From Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: A question about synchronized threads
Date 2011-04-29 17:58 +0200
Organization A noiseless patient Spider
Message-ID <ipen7h$dip$1@dont-email.me> (permalink)
References <3f249d87-aaf8-4732-9ee8-fd112cf82553@f31g2000pri.googlegroups.com>

Show all headers | View raw


On 29/04/2011 17:35, byhesed allegedly wrote:
> public class A {
>      synchronized void m1() { ... }
>      synchronized void m2() { ... }
>      void m3() { ... }
> }
>
> The book explains above code:
>
>      Given an instance a of class A, when one thread is executing
> a.m1(),
>      another thread will be prohibited from executing a.m1() or a.m2().
>
> I have a question.
>
> The explanation means than when one thread is executing m1() method,
> No other threads can execute m1() or m2() thread.
>
> Is it correct?

Yes, it is correct.

> If it is correct, how can I handle it better?
> I think it is too ineffectual. Does anybody know?

By defining yourself the monitor you synchronise on.

When you declare a method synchronized, the code will use the instance 
of which that method is a member as the monitor. In other words, the 
code above is equivalent to this:

  public class A {
    void m1() {
      synchronized( this ){ ... }
    }
    void m2() {
      synchronized( this ){ ... }
    }
    void m3() { ... }
  }

Both method lock on the same monitor, so when one is executed, no other 
thread can execute any of them.

If you don't want that interdependency, you can define monitors yourself:

  public class A {
    private final Object
      m1Monitor = new Object(),
      m2Monitor = new Object()
    ;
    void m1() {
      synchronized( m1Monitor ){ ... }
    }
    void m2() {
      synchronized( m2Monitor ){ ... }
    }
    void m3() { ... }
  }

That way, a thread executing m1 will not prevent another thread from 
executing m2, only m1 itself.

-- 
DF.
An escaped convict once said to me:
"Alcatraz is the place to be"

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

A question about synchronized threads byhesed <byhesed@gmail.com> - 2011-04-29 08:35 -0700
  Re: A question about synchronized threads Lew <noone@lewscanon.com> - 2011-04-29 11:53 -0400
    Re: A question about synchronized threads byhesed <byhesed@gmail.com> - 2011-04-29 09:12 -0700
      Re: A question about synchronized threads Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-04-29 21:01 -0400
        Re: A question about synchronized threads byhesed <byhesed@gmail.com> - 2011-04-29 18:43 -0700
  Re: A question about synchronized threads Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2011-04-29 17:58 +0200
    Re: A question about synchronized threads byhesed <byhesed@gmail.com> - 2011-04-29 09:09 -0700
      Re: A question about synchronized threads markspace <-@.> - 2011-04-29 11:11 -0700
        Re: A question about synchronized threads Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2011-04-29 20:19 +0200
          Re: A question about synchronized threads markspace <-@.> - 2011-04-29 15:21 -0700
          Re: A question about synchronized threads Patricia Shanahan <pats@acm.org> - 2011-04-29 21:10 -0700
  Re: A question about synchronized threads dagon@dagon.net (Dagon) - 2011-04-29 15:55 -0700
    Re: A question about synchronized threads Alice <quaxx1108@example.com> - 2011-04-29 20:08 -0400
    Re: A question about synchronized threads markspace <-@.> - 2011-04-29 19:07 -0700
    Re: A question about synchronized threads byhesed <byhesed@gmail.com> - 2011-04-29 18:49 -0700
      Re: A question about synchronized threads Lew <noone@lewscanon.com> - 2011-05-03 18:57 -0400
        Re: A question about synchronized threads Deeyana <d.awlberg@hotmail.invalid> - 2011-05-04 00:17 +0000
          Re: A question about synchronized threads Lew <noone@lewscanon.com> - 2011-05-04 12:45 -0400
            Re: A question about synchronized threads Deeyana <d.awlberg@hotmail.invalid> - 2011-05-04 19:59 +0000

csiph-web