1. /**
  2. * 測試thread的wait notify notifyAll sleep Interrupted
  3. * @author tomsnail
  4. * @date 2015年4月20日 下午3:20:44
  5. */
  6. public class Test1 {
  7.  
  8. /**
  9. * 物件鎖
  10. * @author tomsnail
  11. * @date 2015年4月20日 下午3:14:13
  12. */
  13. private static final Object lockObject = new Object();
  14.  
  15. /**
  16. * 等待執行緒
  17. * @author tomsnail
  18. * @date 2015年4月20日 下午3:14:22
  19. */
  20. static class Thread1 implements Runnable{
  21.  
  22. @Override
  23. public void run() {
  24. synchronized (lockObject) {
  25. try {
  26. System.out.println(Thread.currentThread().getName()+"wait start");
  27. lockObject.wait();
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. System.out.println(Thread.currentThread().getName()+"wait end");
  32. }
  33. }
  34.  
  35. }
  36.  
  37. /**
  38. * 喚醒執行緒
  39. * @author tomsnail
  40. * @date 2015年4月20日 下午3:14:36
  41. */
  42. static class Thread2 implements Runnable{
  43.  
  44. @Override
  45. public void run() {
  46. synchronized (lockObject) {
  47. lockObject.notify();
  48. System.out.println(Thread.currentThread().getName()+"notify");
  49. }
  50. }
  51. }
  52.  
  53. /**
  54. * 喚醒所有執行緒
  55. * @author tomsnail
  56. * @date 2015年4月20日 下午3:14:51
  57. */
  58. static class Thread3 implements Runnable{
  59.  
  60. @Override
  61. public void run() {
  62. synchronized (lockObject) {
  63. lockObject.notifyAll();
  64. System.out.println(Thread.currentThread().getName()+"notifyAll");
  65. }
  66. }
  67. }
  68.  
  69. /**
  70. * 睡眠執行緒
  71. * @author tomsnail
  72. * @date 2015年4月20日 下午3:20:30
  73. */
  74. static class Thread4 implements Runnable{
  75.  
  76. @Override
  77. public void run() {
  78. try {
  79. System.out.println(Thread.currentThread().getName()+"sleep");
  80. Thread.currentThread().sleep(20000);
  81. } catch (InterruptedException e) {
  82. System.out.println(Thread.currentThread().getName()+"Interrupted");
  83. }
  84.  
  85. }
  86.  
  87. }
  88.  
  89. public static void main(String[] args) {
  90. Thread t1 = new Thread(new Thread1());
  91. Thread t3 = new Thread(new Thread1());
  92. Thread t4 = new Thread(new Thread1());
  93. Thread t2 = new Thread(new Thread2());
  94. Thread t5 = new Thread(new Thread3());
  95. //3個等待執行緒執行
  96. t1.start();
  97. t3.start();
  98. t4.start();
  99. try {
  100. Thread.currentThread().sleep(2000);
  101. } catch (InterruptedException e) {
  102. e.printStackTrace();
  103. }
  104. //喚醒執行緒執行
  105. t2.start();
  106. try {
  107. Thread.currentThread().sleep(2000);
  108. } catch (InterruptedException e) {
  109. e.printStackTrace();
  110. }
  111. //喚醒所有執行緒執行
  112. t5.start();
  113. //睡眠執行緒
  114. Thread t6 = new Thread(new Thread4());
  115. t6.start();
  116. try {
  117. Thread.currentThread().sleep(2000);
  118. } catch (InterruptedException e) {
  119. e.printStackTrace();
  120. }
  121. //睡眠執行緒中斷
  122. t6.interrupt();
  123. }
  124.  
  125. }

結果

  1. Thread-0wait start
  2. Thread-2wait start
  3. Thread-1wait start
  4. Thread-3notify
  5. Thread-0wait end
  6. Thread-4notifyAll
  7. Thread-1wait end
  8. Thread-2wait end
  9. Thread-5sleep
  10. Thread-5Interrupted