//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void unusedEntriesSafelyAcquiredOnCleanup() throws ConcurrentAccessException, NoSuchEntryException, InterruptedException //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void UnusedEntriesSafelyAcquiredOnCleanup() { CountDownReaper countDownReaper = new CountDownReaper(); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final TimedRepository<Object,long> timedRepository = new TimedRepository<>(provider, countDownReaper, 1, clock); TimedRepository <object, long> timedRepository = new TimedRepository <object, long>(_provider, countDownReaper, 1, _clock); ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); NonStoppableCleaner cleaner = new NonStoppableCleaner(timedRepository); try { singleThreadExecutor.submit(cleaner); long entryKey = 1L; long iterations = 100000L; while (entryKey++ < iterations) { timedRepository.Begin(entryKey); timedRepository.Acquire(entryKey); _clock.forward(10, TimeUnit.MILLISECONDS); timedRepository.Release(entryKey); timedRepository.End(entryKey); countDownReaper.Await("Reaper should consume entry from cleaner thread or from our 'end' call. " + "If it was not consumed it mean cleaner and worker thread where not able to" + " figure out who removes entry, and block will ends up in the repo forever.", 10, SECONDS); countDownReaper.Reset(); } } finally { cleaner.Stop(); singleThreadExecutor.shutdownNow(); } }
internal Entry(TimedRepository <KEY, VALUE> outerInstance, VALUE value) { this._outerInstance = outerInstance; this.Value = value; this.LatestActivityTimestamp = outerInstance.clock.millis(); }
private void InitializeInstanceFields() { _provider = _valueGenerator.getAndIncrement; _consumer = _reapedValues.add; _repo = new TimedRepository <long, long>(_provider, _consumer, _timeout, _clock); }
internal NonStoppableCleaner(TimedRepository <object, long> timedRepository) { this.TimedRepository = timedRepository; }