package org.multiverse.stms.gamma.transactionalobjects.txnlong;
import org.multiverse.TestThread;
import org.multiverse.api.Txn;
import org.multiverse.api.callables.TxnVoidCallable;
import org.multiverse.api.predicates.LongPredicate;
import org.multiverse.stms.gamma.transactionalobjects.GammaTxnLong;
public class TxnLongAwaitThread extends TestThread {
private final GammaTxnLong ref;
private final LongPredicate predicate;
public TxnLongAwaitThread(GammaTxnLong ref, final long awaitValue) {
this(ref, new LongPredicate() {
@Override
public boolean evaluate(long current) {
return current == awaitValue;
}
});
}
public TxnLongAwaitThread(GammaTxnLong ref, LongPredicate 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());
}
});
}
}