Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #3356
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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