KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > clif > scenario > util > timers > NegativeExponentialTimer


1 /*
2 * CLIF is a Load Injection Framework
3 * Copyright (C) 2003 France Telecom R&D
4 * Copyright (C) 2003 INRIA
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 * CLIF $Name: $
21 *
22 * Contact: clif@objectweb.org
23 *
24 * @authors: Julien Buret
25 * @authors: Nicolas Droze
26 */

27
28 package org.objectweb.clif.scenario.util.timers;
29
30 import java.util.Random JavaDoc;
31
32 /**
33  * This class represents a timer with a negative exponential random distribution.
34  */

35 public class NegativeExponentialTimer extends RandomTimer {
36
37     private long rand;
38     private Random JavaDoc random = new Random JavaDoc();
39     private int mean;
40
41     /**
42      * The constructor with no parameters (no range)
43      */

44     public NegativeExponentialTimer() {
45     }
46
47     /**
48      * The constructor with specific lower bound and upper bound.
49      * @param min The lower bound.
50      * @param mean The mean value.
51      * Typicals values are min=0.5 mean=7000
52      */

53     public NegativeExponentialTimer(int min, int mean) {
54         setMin(min);
55         this.mean = mean;
56     }
57
58     /**
59      * This method calculate a random delay between the range of the timer.
60      * @return The random delay calculated with a negative exponential distribution.
61      */

62     public long getDelay() {
63         double r = random.nextDouble();
64         if (r < (double) 4.54e-5)
65             return ((long) (r + getMin()));
66         return ((long) ((((double) - mean) * Math.log(r)) + getMin()));
67     }
68
69     /**
70      * This is the useful method to write a scenario.
71      * Calling this method will pause the thread of a random delay.
72      */

73     public void delay() {
74         try {
75             Thread.sleep(getDelay());
76         } catch (InterruptedException JavaDoc e) {
77             e.printStackTrace();
78         }
79     }
80
81 }
82
Popular Tags