Following is the way by which we can use Singleton Design pattern for multiple users.
public class Singleton {
private volatile static Singleton singleton; //volatile is needed so that multiple thread can reconcile the instance
private Singleton(){
}
public static Singleton getSingleton(){ //synchronized keyword has been removed from here
if(singleton = = null)
{ //needed because once there is singleton available no need to aquire monitor again & again as it is costly
synchronized(Singleton.class)
{
//this is needed if two threads are waiting at the monitor at the time when singleton was getting instantiated
if(singleton==null)
{
singleton= new Singleton();
}
}
}
return singleton;
}
}
I am publishing android applications developed by me using this blog. This blog also has collection of technical resources for java, j2ee, spring, hibernate
Showing posts with label multithreading. Show all posts
Showing posts with label multithreading. Show all posts
Thursday, June 3, 2010
Monday, May 10, 2010
Volatile Modifiers in Java
Volatile Modifier
The volatile modifier requests the Java Virtual Machine to always access the shared copy of the variable so the its most current value is always read. If two or more threads access a member variable, and one or more threads might update that variable’s value, and all of the threads do not use synchronization to read and/or write the variable value, then that member variable must be declared volatile to ensure all threads should get the updated value.
We will discuss the java volatile modifier using following example.
In our example, we take two threads Thread T1 and Thread T2 accessing member variable x of class C and here Thread T1 is not using synchronization and Thread T2 uses synchronization. If Thread T2 updates value of variable x from 0 to 1. But if the variable x is not declared as volatile then meanwhile Thread T1 tried to access variable then it will get value of variable x as 0. But as variable x is updated to 1 by Thread T2, To avoid this mess the variable x should be declared as volatile so Thread T1 should get updated value 1.
The volatile modifier requests the Java Virtual Machine to always access the shared copy of the variable so the its most current value is always read. If two or more threads access a member variable, and one or more threads might update that variable’s value, and all of the threads do not use synchronization to read and/or write the variable value, then that member variable must be declared volatile to ensure all threads should get the updated value.
We will discuss the java volatile modifier using following example.
In our example, we take two threads Thread T1 and Thread T2 accessing member variable x of class C and here Thread T1 is not using synchronization and Thread T2 uses synchronization. If Thread T2 updates value of variable x from 0 to 1. But if the variable x is not declared as volatile then meanwhile Thread T1 tried to access variable then it will get value of variable x as 0. But as variable x is updated to 1 by Thread T2, To avoid this mess the variable x should be declared as volatile so Thread T1 should get updated value 1.
Thursday, February 11, 2010
What is difference between Synchronized method and Synchronized block?
What is difference between Synchronized method and Synchronized block?
The key difference is this: if you declare a method to be synchronized, then the entire body of the method becomes synchronized; if you use the synchronized block, however, then you can surround just the "critical section" of the method in the synchronized block, while leaving the rest of the method out of the block.
If the entire method is part of the critical section, then there effectively is no difference. If that is not the case, then you should use a synchronized block around just the critical section. The more statements you have in a synchronized block, the less overall parallelism you get, so you want to keep those to the minimum.
What is difference between ArrayList and Vector ?
If the entire method is part of the critical section, then there effectively is no difference. If that is not the case, then you should use a synchronized block around just the critical section. The more statements you have in a synchronized block, the less overall parallelism you get, so you want to keep those to the minimum.
What is difference between ArrayList and Vector ?
- The Vector class is synchronized, the ArrayList is not.
- ArrayList is fast than the Vector.
Subscribe to:
Posts (Atom)