[OpenJDK 2D-Dev] Review Reqeust for Bug 100068 - SunGraphics2D exposes a reference to itself while non fully initialised
Jim.A.Graham at Sun.COM
Tue Jun 16 18:45:10 UTC 2009
My design goal was "doesn't corrupt anything if run from multiple
threads" (in other words don't require synchronization in any common
places just to keep it functional and don't require it to be used from a
particular thread), but only correct behavior if run from 1 thread at a
In other words, it can be used by multiple threads in sequence, but not
Roman Kennke wrote:
> Hi there,
> first of all, let me say that - especially in the light of this thread,
> I support Mario's change (removal of this one line from the constructor)
> for the following reasons:
> - It should not be necessary as you say, this field should always be
> initialized before use by validatePipe().
> - If it's not, it's most likely a bug.
> - Therefore this line is only good for hiding bugs.
> One thing is not quite clear to me:
>> - A race condition where thread A is validating the pipeline and
>> installs the pipeline objects but hasn't yet reached the code to
>> install the loops while thread B starts rendering using that SG2D thus
>> invoking an operation on a partially initialized pipeline - in this
>> case the NPE is appropriate and allowed since we don't support
>> multi-threaded use of the Graphics2D objects.
> I was always under the assumption, that Java2D should be thread safe.
> And in many places we make sure it is, e.g. in the SurfaceData objects.
> But now you say, it isn't. So what is the real thing about Java2D and
> thread safety. Is it only supposed to be thread safe when each thread
> gets its own Graphics2D object? I think I remember back in the GNU
> Classpath days we had a test case that shared a Graphics (no Graphics2D
> back then..) object between threads and was supposed to be ok, but I
> might be wrong here... Can you enlighten me what is the situation w/
> Java2D and thread safety?
> / Roman
More information about the 2d-dev