I’m curious if there are things in the standard class library that you find useful but not widely used.

  • @austin
    link
    English
    11 year ago

    I had never heard of Phaser, but it looks pretty cool. I just read Baeldung’s Guide to Phaser and correct me if I’m wrong, but doesn’t it kind of seem like a race condition (it could just be how they use it in the examples)?

    class LongRunningAction implements Runnable {
        private String threadName;
        private Phaser ph;
    
        LongRunningAction(String threadName, Phaser ph) {
            this.threadName = threadName;
            this.ph = ph;
            ph.register();
        }
    
        @Override
        public void run() {
            ph.arriveAndAwaitAdvance();
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            ph.arriveAndDeregister();
        }
    }
    

    then

    executorService.submit(new LongRunningAction("thread-1", ph));
    executorService.submit(new LongRunningAction("thread-2", ph));
    executorService.submit(new LongRunningAction("thread-3", ph));
    

    if ph.arriveAndAwaitAdvance(); is called before all of the LongRunningActions are initialized, won’t it proceed before it is supposed to?

    • @[email protected]
      link
      fedilink
      English
      21 year ago

      Your analysis looks right to me. If this were mine I’d initialize all three before submitting any.