Refactoring the types of variables and params to more generic types

It's a best practice to use the more generic type as possible as parameters (mainly public methods) and variables. For example:
```
void foo(List<String> myList) 
```
instead of 
```
void foo(ArrayList<String> myList)
```
This PR addresses this, and makes the variable status a volatile so that any change to it can be made readily available without JVM register caching.