package org.multiverse.stms.gamma.transactionalobjects.txnref;
import org.multiverse.TestThread;
import org.multiverse.api.Txn;
import org.multiverse.api.callables.TxnVoidCallable;
import org.multiverse.api.predicates.Predicate;
import org.multiverse.stms.gamma.transactionalobjects.GammaTxnRef;
public class TxnRefAwaitThread<T> extends TestThread {
private final GammaTxnRef<T> ref;
private final Predicate<T> predicate;
public TxnRefAwaitThread(GammaTxnRef<T> ref, final T awaitValue) {
this(ref, new Predicate<T>() {
@Override
public boolean evaluate(T current) {
return current == awaitValue;
}
});
}
public TxnRefAwaitThread(GammaTxnRef ref, Predicate<T> predicate) {
this.ref = ref;
this.predicate = predicate;
}
@Override
public void doRun() throws Exception {
ref.getStm().getDefaultTxnExecutor().execute(new TxnVoidCallable() {
@Override
public void call(Txn tx) throws Exception {
System.out.println("Starting wait and ref.value found: " + ref.get());
ref.await(predicate);
System.out.println("Finished wait and ref.value found: " + ref.get());
}
});
}
}