Skip to main content

Singleton Design Pattern in Java

Singleton Design Pattern

Singleton Design Pattern means able to create only one object of the class. When you want to restrict some class from being created multiple objects, this design pattern is being used.

First step of creating the class singleton is to make it's constructor private so other class can't call it anytime and create and object of it.

Then create a static method "getInstance" which will return the object of the same class . Here its SingletonExampleClass . This method (getInstance) is created static , because this class has private constructor so we won't have it's object with us to access this class first time.

Synchronized block is used stop multiple threads to access the instantiation code block at the same time, else it will be able to create multiple objects.

now assume that two thread are there T1 and T2. Not Thread T1 access this method first and acquire the lock. While Thread T1 was accessing the code inside Synchronized block, second thread T2 enters and try to access the same synchronized block, but as T1 also has lock , T2 went to waiting state. When T1 complete the execution , T2 acquire the lock, and it will be able to create the new instance once again. So here is the violation of the condition. To avoid this, we provide if conditions to check if and only if the instance is null then and then only it will go for new instance else it will return the already initialized object.

Following Books are good to refer :

public class SingletonExampleClass {
 static SingletonExampleClass instance;

 private SingletonExampleClass() {
 }

 public static SingletonExampleClass getInstance() {
  if (instance == null) {
   synchronized (SingletonExampleClass.class) {
    if (instance == null)
     instance = new SingletonExampleClass(); // 3
   }
  }
  return instance;
 }
}


Why second if statement in Singleton pattern?
Ans :
Step 1

Step -2


Step 3

Comments

Popular posts from this blog

HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException

HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException If you get following error while connecting to your Database with Spring boot, try the suggested solution below: 2018 - 11 - 25 15 : 28 : 50.078 INFO 5335 --- [ main] o. h . e . j . e . i . LobCreatorBuilderImpl : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java. lang . reflect . InvocationTargetException java. lang . reflect . InvocationTargetException : null at sun. reflect . NativeMethodAccessorImpl . invoke0 (Native Method) ~[na: 1.8 . 0 _161] at sun. reflect . NativeMethodAccessorImpl . invoke (NativeMethodAccessorImpl. java : 62 ) ~[na: 1.8 . 0 _161] at sun. reflect . DelegatingMethodAccessorImpl . invoke (DelegatingMethodAccessorImpl. java : 43 ) ~[na: 1.8 . 0 _161] at java. lang . reflect . Method . invoke (Method. java : 498 ) ~[na: 1.8 . 0 _161] at org. hibernate . engin

Could not launch the product because the associated workspace is currently in use by another Eclipse application

If you are seeing following error at the beginning of the Eclipse or any RCP based product then here is the solution: Error Message: "Could not launch the product because the associated workspace is currently in use by another Eclipse application." or “Workspace in use or cannot be created chose a different one.” Solution :  go to workspace location remove file <workspace location>/.metadata/.lock Reason: Through eclipse, user can create multiple Workspace locations. One Workspace location can be edited by one user at a time. A workspace contains the data related to various project configuration and local file storage. To avoid multiple users to access the same workspace, eclipse is maintaining a ".lock" file inside the Workspace. Eclipse will remove this ".lock" file when you will close the Eclipse. But in some cases, the Eclipse will crash due to some error, due to which it could not able to remove ".lock" file from

How to resolve : print() on closed filehandle in perl

How to resolve : print() on closed filehandle in perl Error "print() on closed filehandle" generated in the following condition ( it is on of possible cause of it) -------------------------- BEGIN Code --------------------------------------- my $inputFile = '/this/is/path/of/your/input/file.txt'; open(MYINPUTFILE, ">","$inputFile"); print MYINPUTFILE "any data"; close(MYINPUTFILE); -------------------------- END Code --------------------------------------- here if you don't have permission to access the path '/this/is/path/of/your/input/file.txt' or the path (of parent directory) does not exist then it will throuw the error : print() on closed filehandle To resolve this better to make practice as follow while opening the file: -------------------------- BEGIN Code --------------------------------------- open(MYINPUTFILE, ">","$inputFile") or die "ERROR ::: unable access the file&