I am a beginner in concurrent programming, and i would like to understand exactly why this program doesn't end when I comment the sleep(1)in get()
My first thought, is that the sleep(1) gives the hand back to the Mainthread, maybe Busy waiting has something to do with ?
public class Rdv<V> {
  private V value;
  public void set(V value) {
    Objects.requireNonNull(value);
    this.value = value;
  }
  public V get() throws InterruptedException {
    while(value == null) {
        Thread.sleep(1);  // then comment this line !
    }
    return value;
  }
  public static void main(String[] args) throws InterruptedException {
    Rdv<String> rendezVous = new Rdv<>();
    new Thread(() -> {
      try {
        Thread.sleep(5000);
      } catch (InterruptedException e) {
        throw new AssertionError(e);
      }
      rendezVous.set("hello");
    }).start();
    System.out.println(rendezVous.get());
  }
}
 
    