# spinners.py Jython script to demonstrate spinning from java.lang import Thread from java.util.concurrent.atomic import AtomicReference from java.util.concurrent.atomic import AtomicBoolean from java.util.concurrent import ConcurrentLinkedQueue class putter(Thread): def __init__(self, q, isOneShot=False): self.queue = q self.isOneShot = AtomicBoolean(isOneShot) def run(self): keepGoing = True while keepGoing: data = self.queue.poll() while (not data): # spin until input arrives if self.isOneShot.get(): return data = self.queue.poll() print("Queue data", data) keepGoing = not self.isOneShot.get() def kill(self): self.isOneShot.set(True) q = ConcurrentLinkedQueue() p = putter(q) p.start() class aputter(Thread): def __init__(self, q, isOneShot=False): self.atom = q self.isOneShot = AtomicBoolean(isOneShot) def run(self): keepGoing = True while keepGoing: data = self.atom.get() while (not data): # spin until input arrives if self.isOneShot.get(): return data = self.atom.get() self.atom.set(None) print("Queue data", data) keepGoing = not self.isOneShot.get() def kill(self): self.isOneShot.set(True) q2 = AtomicReference() ap = aputter(q2) ap.start()