/** Create a {@code ThreadAction}. * @param action The main action run when {@link #run()} called. * @return ThreadAction */ public static ThreadAction create(Runnable action) { return create(null, action, null) ; }
private static ThreadAction create(Transactional trans, TxnType txnType, Runnable action, boolean isCommitBefore, boolean isCommitAfter) { return ThreadAction.create ( beforeAction(trans, txnType, isCommitBefore) , action , afterAction(trans, txnType, isCommitAfter) ) ; }
@Test public void action_03() { AtomicInteger before = new AtomicInteger(0) ; AtomicInteger runnable = new AtomicInteger(0) ; AtomicInteger after = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create(()->before.incrementAndGet(), ()->runnable.incrementAndGet(), ()->after.incrementAndGet()) ; action.run() ; assertEquals(1, before.get()) ; assertEquals(1, runnable.get()) ; assertEquals(1, after.get()) ; }
@Test public void action_01() { AtomicInteger x = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create(()->x.incrementAndGet()) ; assertEquals(0, x.get()) ; action.run() ; assertEquals(1, x.get()) ; }
@Test public void action_02() { AtomicInteger x = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create(null, ()->x.incrementAndGet(), null) ; assertEquals(0, x.get()) ; action.run() ; assertEquals(1, x.get()) ; }
@Test public void action_04() { AtomicInteger before = new AtomicInteger(0) ; AtomicInteger runnable = new AtomicInteger(0) ; AtomicInteger after = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create (()->{ before.incrementAndGet() ; bang() ; }, ()->runnable.incrementAndGet(), ()->after.incrementAndGet()) ; action.run() ; assertEquals(1, before.get()) ; assertEquals(0, runnable.get()) ; assertEquals(0, after.get()) ; }
@Test(expected=TestThreadActionException.class) public void action_05() { AtomicInteger before = new AtomicInteger(0) ; AtomicInteger runnable = new AtomicInteger(0) ; AtomicInteger after = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create(()->before.incrementAndGet(), ()->{ runnable.incrementAndGet() ; bang() ; } , ()->after.incrementAndGet()) ; action.run() ; assertEquals(1, before.get()) ; assertEquals(1, runnable.get()) ; assertEquals(0, after.get()) ; }
@Test public void action_07() { AtomicInteger before = new AtomicInteger(0) ; AtomicInteger runnable = new AtomicInteger(0) ; AtomicInteger after = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create(()->before.incrementAndGet(), ()->runnable.incrementAndGet() , ()->{ after.incrementAndGet(); bang() ; } ) ; action.run() ; assertEquals(1, before.get()) ; assertEquals(1, runnable.get()) ; assertEquals(1, after.get()) ; }
@Test public void action_06() { AtomicInteger before = new AtomicInteger(0) ; AtomicInteger runnable = new AtomicInteger(0) ; AtomicInteger after = new AtomicInteger(0) ; ThreadAction action = ThreadAction.create(()->before.incrementAndGet(), ()->{ runnable.incrementAndGet() ; bang() ; } , ()->after.incrementAndGet()) ; try { action.run() ; } catch (TestThreadActionException ex) {} assertEquals(1, before.get()) ; assertEquals(1, runnable.get()) ; assertEquals(1, after.get()) ; }
@Test public void txn_nested_13() { Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{ // Does not block promote ThreadAction.create( ()->Txn.executeWrite(counter, ()->counter.inc()) ).run(); // Can promote outer. Txn.exec(counter, TxnType.WRITE, ()->{}); }); }
@Test(expected=JenaTransactionException.class) public void txn_nested_12() { Txn.exec(counter, TxnType.READ_PROMOTE, ()->{ // Block promote by doing a W txn on another thread. ThreadAction.create( ()->Txn.executeWrite(counter, ()->counter.inc()) ).run(); // Can not promote outer. Txn.exec(counter, TxnType.WRITE, ()->{}); }); }