@Override public void run() { c.decrementAndGet(); while (c.get() != 0) { } while (i++ < 10000) { q.offer(i); } } });
@Override public void run() { c.decrementAndGet(); while (c.get() != 0) { } while (i++ < 10000) { q.offer(i); } } });
@Test(expected = NullPointerException.class) public void mpscLinkedQueueNull() { AbstractMpscLinkedQueue<Object> q = new AbstractMpscLinkedQueue<Object>() { }; q.offer(null); }
@NonNull @Override public Disposable schedule(@NonNull Runnable run) { if (disposed) { return REJECTED; } Runnable decoratedRun = RxJavaCommonPlugins.onSchedule(run); BooleanRunnable br = new BooleanRunnable(decoratedRun); queue.offer(br); if (wip.getAndIncrement() == 0) { try { executor.execute(this); } catch (RejectedExecutionException ex) { disposed = true; queue.clear(); RxJavaCommonPlugins.onError(ex); return REJECTED; } } return br; }
@NonNull @Override public Disposable schedule(@NonNull Runnable run) { if (disposed) { return REJECTED; } Runnable decoratedRun = RxJavaCommonPlugins.onSchedule(run); BooleanRunnable br = new BooleanRunnable(decoratedRun); queue.offer(br); if (wip.getAndIncrement() == 0) { try { executor.execute(this); } catch (RejectedExecutionException ex) { disposed = true; queue.clear(); RxJavaCommonPlugins.onError(ex); return REJECTED; } } return br; }
@NonNull @Override public Disposable schedule(@NonNull Runnable run) { if (disposed) { return REJECTED; } Runnable decoratedRun = RxJavaCommonPlugins.onSchedule(run); BooleanRunnable br = new BooleanRunnable(decoratedRun); queue.offer(br); if (wip.getAndIncrement() == 0) { try { executor.execute(this); } catch (RejectedExecutionException ex) { disposed = true; queue.clear(); RxJavaCommonPlugins.onError(ex); return REJECTED; } } return br; }
@Test public void mpscLinkedQueueBiOffer() { AbstractMpscLinkedQueue<Object> q = new AbstractMpscLinkedQueue<Object>() { }; q.offer(1, 2); assertEquals(1, q.poll()); assertEquals(2, q.poll()); assertNull(q.poll()); }