All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.multiverse.utils.Bugshaker Maven / Gradle / Ivy

The newest version!
package org.multiverse.utils;

import org.multiverse.MultiverseConstants;

import java.util.concurrent.locks.LockSupport;

import static java.lang.Thread.yield;

/**
 * Contains some utility functions for shaking out bugs. It can be used by adding this method is the code like
 * this:
 * 
 * if(MultiverseConstants.SHAKE_BUGS){shakeBugs();}
 * 
* Since the SHAKE_BUGS field is final, it can be removed by the JIT is the bugshaking is disabled so * there is no overhead. *

* At the moment the inside of the Bugshaker is not configurable (so no control on how much delay and how often * it happens). * * @author Peter Veentjer */ public final class Bugshaker implements MultiverseConstants { /** * Delays a random amount of time. What essentially happens is that a random number is selected and one in the * n cases, a sleep is done and one in the n cases a yield is done. */ @SuppressWarnings({"CallToThreadYield"}) public static void shakeBugs() { int random = ThreadLocalRandom.current().nextInt(100); if (random == 10) { sleepUs(10); } else if (random == 20) { yield(); } } /** * Delays a number of microseconds. Having a delay smaller than a microsecond doesn't provide * value since the minimum delay is a few microseconds. * * If the delay is smaller than 0, the call is ignored. * * @param delayUs the number of microseconds to delay. */ public static void sleepUs(long delayUs) { if (delayUs <= 0) { return; } long nanos = delayUs * 1000; LockSupport.parkNanos(nanos); } //we don't want any instances private Bugshaker() { } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy