Esempio n. 1
0
//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();
            }
        }
Esempio n. 2
0
 internal Entry(TimedRepository <KEY, VALUE> outerInstance, VALUE value)
 {
     this._outerInstance          = outerInstance;
     this.Value                   = value;
     this.LatestActivityTimestamp = outerInstance.clock.millis();
 }
Esempio n. 3
0
 private void InitializeInstanceFields()
 {
     _provider = _valueGenerator.getAndIncrement;
     _consumer = _reapedValues.add;
     _repo     = new TimedRepository <long, long>(_provider, _consumer, _timeout, _clock);
 }
Esempio n. 4
0
 internal NonStoppableCleaner(TimedRepository <object, long> timedRepository)
 {
     this.TimedRepository = timedRepository;
 }