MissedNotify.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:2k
源码类别:

进程与线程

开发平台:

Java

  1. public class MissedNotify extends Object {
  2. private Object proceedLock;
  3. public MissedNotify() {
  4. print("in MissedNotify()");
  5. proceedLock = new Object();
  6. }
  7. public void waitToProceed() throws InterruptedException {
  8. print("in waitToProceed() - entered");
  9. synchronized ( proceedLock ) {
  10. print("in waitToProceed() - about to wait()");
  11. proceedLock.wait();
  12. print("in waitToProceed() - back from wait()");
  13. }
  14. print("in waitToProceed() - leaving");
  15. }
  16. public void proceed() {
  17. print("in proceed() - entered");
  18. synchronized ( proceedLock ) {
  19. print("in proceed() - about to notifyAll()");
  20. proceedLock.notifyAll();
  21. print("in proceed() - back from notifyAll()");
  22. }
  23. print("in proceed() - leaving");
  24. }
  25. private static void print(String msg) {
  26. String name = Thread.currentThread().getName();
  27. System.out.println(name + ": " + msg);
  28. }
  29. public static void main(String[] args) {
  30. final MissedNotify mn = new MissedNotify();
  31. Runnable runA = new Runnable() {
  32. public void run() {
  33. try {
  34. Thread.sleep(1000);
  35. mn.waitToProceed();
  36. } catch ( InterruptedException x ) {
  37. x.printStackTrace();
  38. }
  39. }
  40. };
  41. Thread threadA = new Thread(runA, "threadA");
  42. threadA.start();
  43. Runnable runB = new Runnable() {
  44. public void run() {
  45. try {
  46. Thread.sleep(500);
  47. mn.proceed();
  48. } catch ( InterruptedException x ) {
  49. x.printStackTrace();
  50. }
  51. }
  52. };
  53. Thread threadB = new Thread(runB, "threadB");
  54. threadB.start();
  55. try { 
  56. Thread.sleep(10000);
  57. } catch ( InterruptedException x ) {
  58. }
  59. print("about to invoke interrupt() on threadA");
  60. threadA.interrupt();
  61. }
  62. }