There are times when you might want to run green threads. First, native threads are not always available. Second, if your code is not thread-safe, you may experience errors when running native threads. Every object has a corresponding class object. This class object instance is shared among all instances of that class type.
Class objects play an important role in reflection.
You can also use the class object to obtain field, method, and interface information. The example given above is a bit contrived. However, let's say you define an interface that provides a proxy to some backend server. Instead, you provide that class name as a command line argument. Your program can use reflection to go out and instantiate that object.