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

进程与线程

开发平台:

Java

  1. public class FullWaitMain extends Object {
  2. private FullWait fullwait;
  3. private Thread internalThread;
  4. private volatile boolean noStopRequested;
  5. public FullWaitMain(FullWait fw) {
  6. fullwait = fw;
  7. noStopRequested = true;
  8. Runnable r = new Runnable() {
  9. public void run() {
  10. try {
  11. runWork();
  12. } catch ( Exception x ) {
  13. x.printStackTrace(); 
  14. }
  15. }
  16. };
  17. internalThread = new Thread(r);
  18. internalThread.start();
  19. }
  20. private void runWork() {
  21. int count = 6;
  22. while ( noStopRequested ) {
  23. fullwait.setValue(count);
  24. System.out.println("just set value to " + count);
  25. count++;
  26. try {
  27. Thread.sleep(1000);
  28. } catch ( InterruptedException x ) {
  29. // reassert interrupt
  30. Thread.currentThread().interrupt();
  31. }
  32. }
  33. }
  34. public void stopRequest() {
  35. noStopRequested = false;
  36. internalThread.interrupt();
  37. }
  38. public boolean isAlive() {
  39. return internalThread.isAlive();
  40. }
  41. public static void waitfor(FullWait fw, int val, long limit) 
  42. throws InterruptedException {
  43. System.out.println("about to waitUntilAtLeast(" + 
  44. val + ", " + limit + ") ... ");
  45. long startTime = System.currentTimeMillis();
  46. boolean retVal = fw.waitUntilAtLeast(val, limit);
  47. long endTime = System.currentTimeMillis();
  48. System.out.println("waited for " + 
  49. ( endTime - startTime ) + 
  50. " ms, retVal=" + retVal + "n---------------");
  51. }
  52. public static void main(String[] args) {
  53. try {
  54.   FullWait fw = new FullWait(5);
  55. FullWaitMain fwm = new FullWaitMain(fw);
  56. Thread.sleep(500);
  57. // should return true before 10 seconds
  58. waitfor(fw, 10, 10000L); 
  59. // should return true right away --already >= 6
  60. waitfor(fw, 6, 5000L);
  61. // should return true right away
  62. //   --already >= 6 (negative time ignored)
  63. waitfor(fw, 6, -1000L);
  64. // should return false right away --not there 
  65. // yet & negative time
  66. waitfor(fw, 15, -1000L);
  67. // should return false after 5 seconds
  68. waitfor(fw, 999, 5000L);
  69. // should eventually return true
  70. waitfor(fw, 20, 0L);
  71. fwm.stopRequest();
  72. } catch ( InterruptedException x ) {
  73. System.err.println("*unexpectedly* interrupted " +
  74. "somewhere in main()");
  75. }
  76. }
  77. }