To make a singleton class thread-safe, you can use mechanisms like lazy initialization with double-checked locking, using the volatile keyword, or by using the Bill Pugh Singleton design using a private static inner class to hold the singleton instance.