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

进程与线程

开发平台:

Java

  1. public class FullWait extends Object {
  2. private volatile int value;
  3. public FullWait(int initialValue) {
  4. value = initialValue;
  5. }
  6. public synchronized void setValue(int newValue) {
  7. if ( value != newValue ) {
  8. value = newValue;
  9. notifyAll();
  10. }
  11. }
  12. public synchronized boolean waitUntilAtLeast(
  13. int minValue,
  14. long msTimeout
  15. ) throws InterruptedException {
  16. if ( msTimeout == 0L ) {
  17. while ( value < minValue ) {
  18. wait();  // wait indefinitely until notified
  19. }
  20. // condition has finally been met
  21. return true;
  22. // only wait for the specified amount of time
  23. long endTime = System.currentTimeMillis() + msTimeout;
  24. long msRemaining = msTimeout;
  25. while ( ( value < minValue ) && ( msRemaining > 0L ) ) {
  26. wait(msRemaining);
  27. msRemaining = endTime - System.currentTimeMillis();
  28. }
  29. // May have timed out, or may have met value, 
  30. // calc return value.
  31. return ( value >= minValue );
  32. }
  33. public String toString() {
  34. return getClass().getName() + "[value=" + value + "]";
  35. }
  36. }