KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gov > nasa > jpf > jvm > RandomScheduler


1 //
2
// Copyright (C) 2005 United States Government as represented by the
3
// Administrator of the National Aeronautics and Space Administration
4
// (NASA). All Rights Reserved.
5
//
6
// This software is distributed under the NASA Open Source Agreement
7
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
8
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
9
// directory tree for the complete NOSA document.
10
//
11
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
12
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
13
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
14
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
15
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
16
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
17
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
18
//
19
package gov.nasa.jpf.jvm;
20
21 import gov.nasa.jpf.Config;
22 import java.util.Random JavaDoc;
23
24
25 /**
26  * <2do> pcm - that should be the deterministic scheduler (it's used in Simulation)
27  */

28 public class RandomScheduler extends Scheduler {
29   private static Random JavaDoc rand = new Random JavaDoc();
30   private int thread;
31   private int random;
32
33   public RandomScheduler (Config config) {
34     initialize();
35   }
36
37   public int getRandom () {
38     return random;
39   }
40
41   public int getThread () {
42     return thread;
43   }
44
45   public void initialize () {
46     thread = 0;
47     random = -1;
48   }
49
50   public ThreadInfo locateThread (SystemState ss) {
51     int n = ss.getThreadCount();
52     int nthreads = 0;
53     ThreadInfo[] threads = new ThreadInfo[n];
54     int[] refs = new int[n];
55
56     for (int i = 0; i < n; i++) {
57       ThreadInfo th = ss.getThreadInfo(i);
58
59       if (th.isRunnable()) {
60         refs[nthreads] = i;
61         threads[nthreads++] = th;
62       }
63     }
64
65     if (nthreads == 0) {
66       return null;
67     }
68
69     int r = rand.nextInt(nthreads);
70
71     thread = refs[r];
72
73     return threads[r];
74   }
75
76   public void next () {
77     initialize();
78   }
79
80   public int random (int max) {
81     random = rand.nextInt(max);
82
83     return random;
84   }
85 }
Popular Tags