/** * Proactively try to compute the solver asynchronously, if not already computed. * Does not block. */ public void compute() { // Make sure only one attempts to build at one time if (solverUpdating.compareAndSet(false, true)) { executor.execute(LoggingCallable.log(() -> { try { log.info("Computing cached solver"); // Not as much hurry if one already exists boolean lowPriority = solver.get() != null; Solver newYTYSolver = LinearSystemSolver.getSolver(vectorPartitions.getVTV(lowPriority)); if (newYTYSolver != null) { log.info("Computed new solver {}", newYTYSolver); solver.set(newYTYSolver); } } finally { // Allow any threads waiting for initial model to proceed. // It's possible the solver is still null here if there is no input. solverInitialized.countDown(); solverUpdating.set(false); } }).asRunnable()); } }
}).asRunnable(), "OryxServingLayerUpdateConsumerThread").start();
@Test public void testAsRunnable() { AtomicInteger a = new AtomicInteger(); LoggingCallable.log(() -> a.set(3)).asRunnable().run(); assertEquals(3, a.get()); }
close(); }).asRunnable(), "OryxSpeedLayerUpdateConsumerThread").start();
new Thread(LoggingCallable.log(consumeInput).asRunnable(), "ConsumeInputThread").start();
new Thread(LoggingCallable.log(consumeInput).asRunnable(), "ConsumeInputThread").start();
new Thread(LoggingCallable.log(consumeUpdate).asRunnable(), "ConsumeUpdateThread").start();
new Thread(LoggingCallable.log(consumeTopic).asRunnable(), "ConsumeTopicThread").start();
new Thread(LoggingCallable.log(consumeTopic).asRunnable(), "ConsumeTopicThread").start();
/** * Proactively try to compute the solver asynchronously, if not already computed. * Does not block. */ public void compute() { // Make sure only one attempts to build at one time if (solverUpdating.compareAndSet(false, true)) { executor.execute(LoggingCallable.log(() -> { try { log.info("Computing cached solver"); // Not as much hurry if one already exists boolean lowPriority = solver.get() != null; Solver newYTYSolver = LinearSystemSolver.getSolver(vectorPartitions.getVTV(lowPriority)); if (newYTYSolver != null) { log.info("Computed new solver {}", newYTYSolver); solver.set(newYTYSolver); } } finally { // Allow any threads waiting for initial model to proceed. // It's possible the solver is still null here if there is no input. solverInitialized.countDown(); solverUpdating.set(false); } }).asRunnable()); } }
close(); }).asRunnable(), "OryxSpeedLayerUpdateConsumerThread").start();