Java Mailing List Archive

http://www.junlu.com/

Google
Google
Mailing List
Home
Forum Home
JBoss - Java Application Server
Tomcat - JSP/Servlet container
Struts - A MVC web framework
iText - An open source PDF Java Library
JDOM - JDOM XML Parser
JSP - A mailing list about Java Server Pages specification and reference
J2EE - A mailing list for Java(tm) 2 Platform, Enterprise Edition
J2EE Pattern - An interest list for Sun Java Center J2EE Pattern Catalog
Servlet - A mailing list for discussion about Sun Microsystem's Java Servlet API Technology
Struts & Hibernate
Subjects
JSP editor plugin for eclipse ?
org apache jasper JasperException: Unable to compile class for JSP
Tomcat: Connection reset by peer: socket write error
Cannot retrieve definition for form bean null
Struts Tiles Tutorial (free Struts training)
Where do I download Tomcat 4 0 6?
Data Access Object (DAO) pattern, example DAO 's
Where to download Tomcat v 4 1 24 from?
Tomcat 5 0 16 Requested resource not available
Subject: Servlet : Session invalidate
Oracle Connection Pooling in 3 2 2
Servlet action is currently unavailable
Tomcat/Struts Unicode Encoding/Decoding problems
Subject: Running a Simple JMS Example
Tomcat and webapplication specific java library path
Mapping in workers2 properties
org apache jasper JasperException
problem with html:text bean throwing exception
Cannot find message resources under key org apache struts action
   MESSAGE
Cannot find message resources under key org apache struts action MESSAGE
invalid direct reference problem with solution
Tool for jsp debug Try Sysdeo Eclipse Plugin
Tomcat 5 Cannot load JDBC driver class 'null ' SQL state: null
weblogic ejbc
java properties file
Jboss 3 2 3 Coyote Can 't re
Tomcat 5, Apache2 and mod jk2 integration problem
JBoss example problem new to J2EE
Value attribute of <html:checkbox
url string for connecting jboss to oracle
javax servlet ServletException: BeanUtils populate
5 0 18: Windows XP Pro vs Windows 2000
HTTP Status 404 The requested resource is not available
 
Singleton pattern

Singleton pattern

2005-10-04       - By Harish

 Back
Reply:     1     2     3     4     5     6     7     8  

Hi,

The code  works fine for multithreaded access to the getInstance() method.
However, when you analyze it you realize that synchronization is required only
for the first invocation of the method. Subsequent invocations do not require
synchronization because the first invocation is the only invocation that
executes the code at //2,( see below) which is the only line that requires
synchronization. All other invocations determine that instance is non-null and
return it. Multiple threads can safely execute concurrently on all invocations
except the first. However, because the method is synchronized, you pay the cost
of synchronization for every invocation of the method, even though it is only
required on the first invocation.

Another way is to Forgo synchronization and use a static  field.

class Singleton
{
private static Singleton instance = new Singleton();
 private Singleton()
 {
   //...
 }
 public static Singleton getInstance()
 {
   return instance;
 }
}
The code in Listing 10 does not use synchronization and ensures that the
Singleton object is not created until a call is made to the static getInstance(
) method. This is a good alternative if your objective is to eliminate
synchronization

Thanks

Harish



-- -- Original Message -- --
From: "SUBSCRIBE EJB-INTEREST anonymous" <ahtwog@(protected)>
To: <J2EEPATTERNS-INTEREST@(protected)>
Sent: Tuesday, October 04, 2005 8:06 AM
Subject: Singleton pattern


> Hi,
> Is the below singleton pattern thread safe.
> public class Singleton
> {
> private static Singleton singleton ;
> public synchronized static Singleton getInstance() throws
> {
>  if(singleton ==null)
>  {
>    singleton = new Singleton ();           ////// >>> 2
>  }
>
>  return singleton ;
> }
>
> private Singleton ()  {
>  //perform member variable initialization here
> }
>
> ====================================================================
> Companion Site: http://www.corej2eepatterns.com
> J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns
> List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html
> Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
>

====================================================================
Companion Site: http://www.corej2eepatterns.com
J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns
List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html
Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859 (See http://iso-8859.ora-code.com)-1">
<META content="MSHTML 6.00.2800.1505" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV>
<P><FONT face="Palatino Linotype" size=2>Hi,</FONT></P>
<P><FONT face="Palatino Linotype" size=2>The code&nbsp; works fine for
multithreaded access to the getInstance() method. However, when you analyze it
you realize that synchronization is required only for the first invocation of
the method. Subsequent invocations do not require synchronization because the
first invocation is the only invocation that executes the code at //2,( see
below)&nbsp;which is the only line that requires synchronization. All other
invocations determine that instance is non-null and return it. Multiple threads
can safely execute concurrently on all invocations except the first. However,
because the method is synchronized, you pay the cost of synchronization for
every invocation of the method, even though it is only required on the first
invocation.</FONT></P>
<P><FONT face="Palatino Linotype" size=2>Another way is to Forgo
synchronization
and use a static &nbsp;field.</FONT></P>
<P><FONT face="Palatino Linotype" size=2>class Singleton<BR>{<BR>private static
Singleton instance = new Singleton();<BR>&nbsp; private Singleton()<BR>&nbsp;
{<BR>&nbsp;&nbsp;&nbsp; //...<BR>&nbsp; }<BR>&nbsp; public static Singleton
getInstance()<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; return instance;<BR>&nbsp;
}<BR>}<BR>The code in Listing 10 does not use synchronization and ensures that
the <CODE>Singleton</CODE> object is not created until a call is made to the
<CODE>static getInstance()</CODE> method. This is a good alternative if your
objective is to eliminate synchronization</FONT></P>
<P><FONT face="Palatino Linotype" size=2>Thanks</FONT></P>
<P><FONT face="Palatino Linotype" size=2>Harish</FONT></P>
<P><FONT face="Palatino Linotype" size=2></FONT>&nbsp;</P></DIV>
<DIV><FONT face="Palatino Linotype" size=2>-- -- Original Message -- -- </FONT>
<DIV><FONT face="Palatino Linotype" size=2>From: "SUBSCRIBE EJB-INTEREST
anonymous" &lt;</FONT><A href="mailto:ahtwog@(protected)"><FONT
face="Palatino Linotype" size=2>ahtwog@(protected)</FONT></A><FONT
face="Palatino Linotype" size=2>&gt;</FONT></DIV>
<DIV><FONT face="Palatino Linotype" size=2>To: &lt;</FONT><A
href="mailto:J2EEPATTERNS-INTEREST@(protected)"><FONT face="Palatino Linotype"
size=2>J2EEPATTERNS-INTEREST@(protected)</FONT></A><FONT
face="Palatino Linotype" size=2>&gt;</FONT></DIV>
<DIV><FONT face="Palatino Linotype" size=2>Sent: Tuesday, October 04, 2005 8:06
AM</FONT></DIV>
<DIV><FONT face="Palatino Linotype" size=2>Subject: Singleton
pattern</FONT></DIV></DIV>
<DIV><FONT face="Palatino Linotype"><BR><FONT size=2></FONT></FONT></DIV><FONT
face="Palatino Linotype" size=2>&gt; Hi,<BR>&gt; Is the below singleton pattern
thread safe.<BR>&gt; public class Singleton<BR>&gt; {<BR>&gt; private static
Singleton singleton ;<BR>&gt; public synchronized static Singleton getInstance(
)
throws<BR>&gt; {<BR>&gt; &nbsp;if(singleton ==null)<BR>&gt; &nbsp;{<BR>&gt;
&nbsp;&nbsp; <FONT color=#ff0000>singleton = new Singleton
();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //////
&gt;&gt;&gt; 2 <BR></FONT>&gt; &nbsp;}<BR>&gt; <BR>&gt; &nbsp;return singleton
;<BR>&gt; }<BR>&gt; <BR>&gt; private Singleton ()&nbsp; {<BR>&gt;
&nbsp;//perform member variable initialization here<BR>&gt; }<BR>&gt; <BR>&gt;
====================================================================<BR>&gt;
Companion Site: </FONT><A href="http://www.corej2eepatterns.com"><FONT
face="Palatino Linotype"
size=2>http://www.corej2eepatterns.com</FONT></A><BR><FONT
face="Palatino Linotype" size=2>&gt; J2EE BluePrints: </FONT><A
href="http://java.sun.com/blueprints/corej2eepatterns"><FONT
face="Palatino Linotype"
size=2>http://java.sun.com/blueprints/corej2eepatterns</FONT></A><BR><FONT
face="Palatino Linotype" size=2>&gt; List Archive: </FONT><A
href="http://archives.java.sun.com/archives/j2eepatterns-interest.html"><FONT
face="Palatino Linotype"
size=2>http://archives.java.sun.com/archives/j2eepatterns-interest.html</FONT><
/A><BR><FONT
face="Palatino Linotype" size=2>&gt; Unsubscribing: email "signoff
J2EEPATTERNS-INTEREST" to </FONT><A href="mailto:listserv@(protected)"><FONT
face="Palatino Linotype" size=2>listserv@(protected)</FONT></A><BR><FONT
face="Palatino Linotype" size=2>&gt; </FONT></BODY></HTML>
====================================================================
Companion Site: http://www.corej2eepatterns.com
J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns
List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html
Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)

©2008 junlu.com - Jax Systems, LLC, U.S.A.