Thanks ..! Got the solutions went with the ThreadLocal variables concept
Most of the environment specific values in my framework are defined as STATIC.
In Java, Static variables are used to share the data between the threads which means these variable are same across the threads. In that case, when second thread assigns a value to the static variable it overrides the value set by first thread. This causes the problem.
To overcome the above problem, there are two approaches we can consider.
1) All the local variables in java are stored in Stack memory And each thread has it's own stack. So if you change the variables to local variables, it will solves the problem.
2) with the above approach in the existing framework lot of dependencies will break. And it's always not easy to make variables to local. So we have to look for better solution. For this type of situations, we have ThreadLocal variables in java.
http://learn-testing-urself.blogspot.in/2015/05/importance-of-threadlocal-in-parallel.html