From the ExponentialDistribution API:
http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/distribution/ExponentialDistribution.html#sample()
public double sample()
Generate a random value sampled from this
distribution. The default implementation uses the inversion method.
Algorithm Description: this implementation uses the Inversion Method
to generate exponentially distributed random values from uniform
deviates.
So when you see (int)exp.sample(), we are converting it to this random value it selected.
exp is the instance of ExponentialDistribution(4.0) we've created, so exp.sample() calls ExponentialDistribution's sample() method.
Now for the (int).
Placing an Object type or primitive type in parenthesis (int this case (int)) prior to another Object/primitive is called "casting". Casting variables in Java
Pretty much, since sample() returns a double, but timestamp stores ints, we need to switch one of their types (they must match), and it's waaaaay easier to change exp.sample()'s.
So, all in all, this says "Take the object exp, call it's method sample(), and then convert that into an int".