1. Yes, because the class is immutable and references no static variables.
  2. public class Main {
       public static void main(String[] args) {
         final Object o1 = new Object();
         final Object o2 = new Object();
       
         new Thread() {
           public void run() {
              synchronized(o1) {
                synchronized(o2) {
                }
              }
           }
         }.start();
       
         new Thread() {
           public void run() {
              synchronized(o2) {
                synchronized(o1) {
                }
              }
           }
         }.start();
       }
    }
    
  3. SetLock.java