fork download
  1. class Ideone {
  2. private static final Object lock = new Object();
  3.  
  4. public static void main(String[] args) {
  5. printWithThreadNamePrefix("Start");
  6. Thread waiter = new Thread(Ideone::waiter);
  7. waiter.start();
  8.  
  9. // Give waiter some time to a) start and b) acquire the intrinsic lock
  10. try {
  11. Thread.sleep(500);
  12. } catch (InterruptedException e) {
  13. }
  14.  
  15. final Thread notifier = new Thread(Ideone::notifier);
  16. notifier.start();
  17.  
  18. while (true) {
  19. try {
  20. waiter.join();
  21. break;
  22. } catch (InterruptedException e) {
  23. }
  24. }
  25.  
  26. printWithThreadNamePrefix("End");
  27. }
  28.  
  29. private static void waiter() {
  30. synchronized (lock) {
  31. printWithThreadNamePrefix("Waiting...");
  32. while (true) {
  33. try {
  34. lock.wait();
  35. break;
  36. } catch (InterruptedException e) {
  37. }
  38. }
  39. printWithThreadNamePrefix("... done waiting");
  40. }
  41. }
  42.  
  43. private static void printWithThreadNamePrefix(String msg) {
  44. System.out.println(String.format(
  45. "%s: %s",
  46. Thread.currentThread().getName(),
  47. msg));
  48. }
  49.  
  50. private static void notifier() {
  51. synchronized (lock) {
  52. printWithThreadNamePrefix("notifying");
  53. lock.notify();
  54. while (true) {
  55. }
  56. }
  57. }
  58. }
Time limit exceeded #stdin #stdout 5s 54072KB
stdin
Standard input is empty
stdout
main: Start
Thread-0: Waiting...
Thread-1: notifying