fork(1) download
  1. package cc.ptt;
  2.  
  3. public class CountDown {
  4. public interface OnTickListener {
  5. public void onTick(int seconds);
  6. }
  7.  
  8. private static class NullTickListener implements OnTickListener {
  9. @Override
  10. public void onTick(int seconds) {
  11. }
  12. }
  13.  
  14. private static final OnTickListener nullListener =
  15. new NullTickListener();
  16. private OnTickListener tickListener = nullListener;
  17.  
  18. public void asyncStart(final int seconds) {
  19. // run in some worker thread
  20. new Thread(new Runnable() {
  21. public void run() {
  22. try {
  23. count(tickListener, seconds);
  24. } catch (InterruptedException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }).start();
  29. }
  30.  
  31. public void syncStart(int seconds) {
  32. // run in the caller thread
  33. try {
  34. count(tickListener, seconds);
  35. } catch (InterruptedException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39.  
  40. private void count(OnTickListener listener, int timeInSecs)
  41. if (timeInSecs <= 0) {
  42. listener.onTick(0);
  43. return;
  44. }
  45. listener.onTick(timeInSecs);
  46. Thread.sleep(1000);
  47. count(listener, timeInSecs - 1);
  48. }
  49.  
  50. public OnTickListener getTickListener() {
  51. return tickListener == nullListener? null : tickListener;
  52. }
  53. public void setTickListener(OnTickListener tickListener) {
  54. if (tickListener == null)
  55. this.tickListener = nullListener;
  56. else
  57. this.tickListener = tickListener;
  58. }
  59. }
  60.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty