Advertisement
Guest User

Thread Safe Fibonacci Iterator

a guest
Oct 5th, 2023
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.84 KB | None | 0 0
  1. class Fibonacci implements Iterator<BigInteger> {
  2.     private final AtomicReference<BigInteger> prev = new AtomicReference<>(ZERO);
  3.     private final AtomicReference<BigInteger> curr = new AtomicReference<>(ONE);
  4.  
  5.     public boolean hasNext() {
  6.         return true;
  7.     }
  8.  
  9.     public BigInteger next() {
  10.         while (true) {
  11.             var prev = this.prev.get();
  12.             var curr = this.curr.get();
  13.             var nextCurr = ZERO == prev ? new BigInteger("1") : curr.add(prev);
  14.             if (prev != curr && this.prev.get() == prev) {
  15.                 if (this.prev.compareAndSet(prev, curr)) {
  16.                     this.curr.compareAndSet(curr, nextCurr);
  17.                     return nextCurr;
  18.                 } else {
  19.                     this.curr.compareAndSet(curr, nextCurr);
  20.                 }
  21.             }
  22.         }
  23.     }
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement