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

进程与线程

开发平台:

Java

  1. public class TransitionDetector extends Object {
  2. private boolean value;
  3. private Object valueLock;
  4. private Object falseToTrueLock;
  5. private Object trueToFalseLock;
  6. public TransitionDetector(boolean initialValue) {
  7. value = initialValue;
  8. valueLock = new Object();
  9. falseToTrueLock = new Object();
  10. trueToFalseLock = new Object();
  11. }
  12. public void setValue(boolean newValue) {
  13. synchronized ( valueLock ) {
  14. if ( newValue != value ) {
  15. value = newValue;
  16. if ( value ) {
  17. notifyFalseToTrueWaiters();
  18. } else {
  19. notifyTrueToFalseWaiters();
  20. }
  21. }
  22. }
  23. }
  24. public void pulseValue() {
  25. // Sync on valueLock to be sure that no other threads 
  26. // get into setValue() between these two setValue() 
  27. // calls.
  28. synchronized ( valueLock ) {
  29. setValue(!value);
  30. setValue(!value);
  31. }
  32. }
  33. public boolean isTrue() {
  34. synchronized ( valueLock ) {
  35. return value;
  36. }
  37. }
  38. public void waitForFalseToTrueTransition() 
  39. throws InterruptedException {
  40. synchronized ( falseToTrueLock ) {
  41. falseToTrueLock.wait();
  42. }
  43. }
  44. private void notifyFalseToTrueWaiters() {
  45. synchronized ( falseToTrueLock ) {
  46. falseToTrueLock.notifyAll();
  47. }
  48. }
  49. public void waitForTrueToFalseTransition() 
  50. throws InterruptedException {
  51. synchronized ( trueToFalseLock ) {
  52. trueToFalseLock.wait();
  53. }
  54. }
  55. private void notifyTrueToFalseWaiters() {
  56. synchronized ( trueToFalseLock ) {
  57. trueToFalseLock.notifyAll();
  58. }
  59. }
  60. public String toString() {
  61. return String.valueOf(isTrue());
  62. }
  63. }