Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #6613
| From | Henderson <h1@g1.f1> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: static synchronized method |
| Date | 2011-07-27 10:47 -0400 |
| Organization | e1 |
| Message-ID | <j0p8e9$m28$1@speranza.aioe.org> (permalink) |
| References | <0e62fc71-0ae6-408c-9e93-c43b3b7c56f0@28g2000pry.googlegroups.com> <j0p4ag$h3a$1@dont-email.me> |
On 27/07/2011 9:37 AM, markspace wrote: > On 7/27/2011 6:31 AM, Ross wrote: >> If I have a method which is both static and synchronized, then can I >> guarantee that only one thread will be allowed in at once, even if I >> have multiple instances of the object in memory, one per thread? > > Yes. The "synchronized" keyword on a static method synchronizes on the > class object. Since all instances of that class share one class object, > then there'll be only one thread, period, in that method at a time. > > There's a slight exception for class loaders which load load multiple > instances of the same class object. Since all the static method does is > synchronize on the class object, there may be be more than one thread, > one per loaded class object, in those circumstances. > > There are some good reasons to have multiple class objects, but it's not > really normal and would usually be considered an error in the class > loader, just so you know. Also, the likely reason for synchronizing a static method is to make sure operations it performs on mutable private static variables are atomic and don't suffer from data races. If there are two copies of the class via different classloaders, they get their own independent copies of those static variables as well as their own independent monitors, so their having separate monitors doesn't create an opportunity for a data race. The main concern, instead, is invariant violation when the design expects a singleton of some sort: a single global registry of some sort, a single global interning cache, a single INSTANCE reference to a single singleton instance such as what java.awt.Toolkit.getDefaultToolkit() returns, etc.; if there are suddenly two of a thing like that when the design calls for exactly one, then problems can ensue, but problems that have nothing to do with concurrency and data races.
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar
static synchronized method Ross <rossclement@gmail.com> - 2011-07-27 06:31 -0700
Re: static synchronized method markspace <-@.> - 2011-07-27 06:37 -0700
Re: static synchronized method Henderson <h1@g1.f1> - 2011-07-27 10:47 -0400
Re: static synchronized method lewbloch <lewbloch@gmail.com> - 2011-07-27 14:06 -0700
Re: static synchronized method Alice <quaxx1108@example.com> - 2011-07-27 22:04 -0400
Re: static synchronized method lewbloch <lewbloch@gmail.com> - 2011-07-29 09:28 -0700
Re: static synchronized method Alice <quaxx1108@example.com> - 2011-07-29 18:01 -0400
Re: static synchronized method Ross <rossclement@gmail.com> - 2011-07-28 03:09 -0700
Re: static synchronized method lewbloch <lewbloch@gmail.com> - 2011-07-29 09:29 -0700
Re: static synchronized method Roedy Green <see_website@mindprod.com.invalid> - 2011-07-27 13:43 -0700
csiph-web