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

进程与线程

开发平台:

Java

  1. public class Signaling extends Object {
  2. private BooleanLock readyLock;
  3. public Signaling(BooleanLock readyLock) {
  4. this.readyLock = readyLock;
  5. Runnable r = new Runnable() {
  6. public void run() {
  7. try {
  8. runWork();
  9. } catch ( Exception x ) {
  10. // in case ANY exception slips through
  11. x.printStackTrace(); 
  12. }
  13. }
  14. };
  15. Thread internalThread = new Thread(r, "internal");
  16. internalThread.start();
  17. }
  18. private void runWork() {
  19. try {
  20. print("about to wait for readyLock to be true");
  21. readyLock.waitUntilTrue(0);  // 0 - wait forever
  22. print("readyLock is now true");
  23. } catch ( InterruptedException x ) {
  24. print("interrupted while waiting for readyLock " +
  25. "to become true");
  26. }
  27. }
  28. private static void print(String msg) {
  29. String name = Thread.currentThread().getName();
  30. System.err.println(name + ": " + msg);
  31. }
  32. public static void main(String[] args) {
  33. try {
  34. print("creating BooleanLock instance");
  35. BooleanLock ready = new BooleanLock(false);
  36. print("creating Signaling instance");
  37. new Signaling(ready);
  38. print("about to sleep for 3 seconds");
  39. Thread.sleep(3000);
  40. print("about to setValue to true");
  41. ready.setValue(true);
  42. print("ready.isTrue()=" + ready.isTrue());
  43. } catch ( InterruptedException x ) {
  44. x.printStackTrace();
  45. }
  46. }
  47. }