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


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

Re: static synchronized method

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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