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

进程与线程

开发平台:

Java

  1. public class TransitionDetectorMain extends Object {
  2. private static Thread startTrueWaiter(
  3. final TransitionDetector td,
  4. String name
  5. ) {
  6. Runnable r = new Runnable() {
  7. public void run() {
  8. try {
  9. while ( true ) {
  10. print("about to wait for false-to-" +
  11. "true transition, td=" + td);
  12. td.waitForFalseToTrueTransition();
  13. print("just noticed for false-to-" +
  14. "true transition, td=" + td);
  15. }
  16. } catch ( InterruptedException ix ) {
  17. return;
  18. }
  19. }
  20. };
  21. Thread t = new Thread(r, name);
  22. t.start();
  23. return t;
  24. }
  25. private static Thread startFalseWaiter(
  26. final TransitionDetector td,
  27. String name
  28. ) {
  29. Runnable r = new Runnable() {
  30. public void run() {
  31. try {
  32. while ( true ) {
  33. print("about to wait for true-to-" +
  34. "false transition, td=" + td);
  35. td.waitForTrueToFalseTransition();
  36. print("just noticed for true-to-" +
  37. "false transition, td=" + td);
  38. }
  39. } catch ( InterruptedException ix ) {
  40. return;
  41. }
  42. }
  43. };
  44. Thread t = new Thread(r, name);
  45. t.start();
  46. return t;
  47. }
  48. private static void print(String msg) {
  49. String name = Thread.currentThread().getName();
  50. System.err.println(name + ": " + msg);
  51. }
  52. public static void main(String[] args) {
  53. try {
  54. TransitionDetector td = 
  55. new TransitionDetector(false);
  56. Thread threadA = startTrueWaiter(td, "threadA");
  57. Thread threadB = startFalseWaiter(td, "threadB");
  58. Thread.sleep(200);
  59. print("td=" + td + ", about to set to 'false'");
  60. td.setValue(false);
  61. Thread.sleep(200);
  62. print("td=" + td + ", about to set to 'true'");
  63. td.setValue(true);
  64. Thread.sleep(200);
  65. print("td=" + td + ", about to pulse value");
  66. td.pulseValue();
  67. Thread.sleep(200);
  68. threadA.interrupt();
  69. threadB.interrupt();
  70. } catch ( InterruptedException x ) {
  71. x.printStackTrace();
  72. }
  73. }
  74. }