static class LockedVar<A> implements IVar<A> {
  A v; // you can access this directly if you use one thread
  transient Lock lock = lock();
  
  *() {}
  *(A *v) {}
  
  public void set(A a) {
    lock lock;
    v = a;
  }
  
  public A get() { lock lock; ret v; }
  public bool has() { lock lock; ret v != null; }
  public void clear() { lock lock; v = null; }
  
  toString { ret str(get()); }
}