Java cvprof Coverage Report for
Multithreaded.java

    1   
    2   package uk.co.badgersinfoil.cvprof.example;
    3   
    4   public class Multithreaded implements Runnable {
    5    
    6           private static final int THREAD_COUNT = 10;
    7    
    8           public static void test() {
    9                   Multithreaded test = new Multithreaded();
   10                   synchronized (test) {
   11                           for (int i=0 ; i<THREAD_COUNT ; i++) {
   12                                   Thread t = new Thread(test);
   13                                   t.start();
   14                           }
   15                           test.untilAllStart();
   16                           test.notifyAll();
   17                   }
   18           }
   19    
   20           private int startCount;
   21    
   22           public void run() {
   23                   // With all these method calls we hope to catch evidence of
   24                   // 'lost updates' to the profiling data.
   25                   //
   26                   // They will allways be executed one-after-the-other, so any
   27                   // 'gaps' are evidence of something wrong.
   28                   startIt();
   29                   thing();
   30                   thing();
   31                   thing();
   32                   thing();
   33                   thing();
   34                   thing();
   35                   thing();
   36                   thing();
   37                   thing();
   38                   thing();
   39                   thing();
   40                   thing();
   41                   thing();
   42                   thing();
   43                   thing();
   44                   thing();
   45                   thing();
   46                   thing();
   47                   thing();
   48                   thing();
   49                   thing();
   50                   thing();
   51                   thing();
   52                   thing();
   53                   thing();
   54                   thing();
   55                   thing();
   56                   thing();
   57                   thing();
   58                   thing();
   59                   thing();
   60                   thing();
   61                   thing();
   62                   thing();
   63                   thing();
   64                   thing();
   65                   thing();
   66                   thing();
   67                   thing();
   68                   thing();
   69                   thing();
   70                   thing();
   71                   thing();
   72                   thing();
   73                   thing();
   74                   thing();
   75                   thing();
   76                   thing();
   77                   thing();
   78                   thing();
   79                   thing();
   80                   thing();
   81                   thing();
   82                   thing();
   83                   thing();
   84                   thing();
   85                   thing();
   86                   thing();
   87                   thing();
   88                   thing();
   89                   thing();
   90                   thing();
   91                   thing();
   92                   thing();
   93                   thing();
   94                   thing();
   95                   thing();
   96                   thing();
   97                   thing();
   98                   thing();
   99                   thing();
  100                   thing();
  101                   thing();
  102                   thing();
  103                   thing();
  104                   thing();
  105                   thing();
  106                   thing();
  107                   thing();
  108                   thing();
  109           }
  110    
  111           private synchronized void startIt() {
  112                   startCount++;
  113                   untilAllStart();
  114           }
  115    
  116           private synchronized void untilAllStart() {
  117                   try {
  118                           notifyAll();
  119                           while (startCount < THREAD_COUNT) {
  120                                   wait();
  121                           }
  122                   } catch (InterruptedException e) {
  123 >                         throw new Error("Unexpected inturruption");
  124                   }
  125           }
  126    
  127           private void thing() {
  128                   try {
  129                           Thread.sleep(6);
  130                   } catch (InterruptedException e) {
  131 >                         throw new Error("Unexpected inturruption");
  132                   }
  133           }
  134   }