This might be controversial, but I just realized I very seldom use wait and notify directly. Instead, I use some higher-level construct from the java.util.concurrent
package. Are there use cases where wait and notify are the only solution or should they only be used when building higher-level constructs?