====== QueueTester ======
===== Getter class =====
package com.circularQueue;
public class Getter extends Thread
{
private CircularConcurrentQueue queue;
private String[] destArray;
private int from;
private int to;
public Getter( CircularConcurrentQueue queue, String[] destArray, int from, int to )
{
this.queue = queue;
this.destArray = destArray;
this.from = from;
this.to = to;
}
@Override
public void run()
{
try
{
Thread.sleep( (int)(Math.random() * 1000) );
for( int nCounter = from; nCounter < to; nCounter++ )
{
String out = queue.next();
destArray[nCounter] = out;
} // for nCounter
}
catch( InterruptedException e )
{
e.printStackTrace();
} // try part
} // run
}
===== Writer class =====
package com.circularQueue;
public class Putter extends Thread
{
private CircularConcurrentQueue queue;
private int from;
private int to;
private String[] idArray;
public Putter( CircularConcurrentQueue queue, String[] idArray, int from, int to )
{
this.queue = queue;
this.idArray = idArray;
this.from = from;
this.to = to;
}
@Override
public void run()
{
try
{
Thread.sleep( (int)(Math.random() * 1000) );
// try to put in the queue all the elements from "from" to "to"
for( int nCounter = from; nCounter < to; nCounter ++ )
{
queue.add( idArray[nCounter] );
}
}
catch( InterruptedException e )
{
e.printStackTrace();
} // try part
} // run
}
===== Application =====
package com.Queue;
import java.util.UUID;
public class App
{
private final int MAX_ID = 100000;
private final int NUM_THREADS = MAX_ID / 1000;
private String[] idListOrigin;
private String[] idListDest;
private CircularConcurrentQueue queue = new ConcurrentQueue();
public void run()
{
System.out.print( "Fulfilling list of ID's..." );
// feed the idList
idListOrigin = new String[MAX_ID];
idListDest = new String[MAX_ID];
for( int idListCounter = 0; idListCounter < MAX_ID; idListCounter++ )
{
idListOrigin[idListCounter] = UUID.randomUUID().toString();
} // for( idListCounter = 0
System.out.println( "OK" );
Putter[] allPutters = new Putter[NUM_THREADS];
Getter[] allGetters = new Getter[NUM_THREADS];
System.out.print( "Creating threads....");
for( int idLauncher = 0; idLauncher < NUM_THREADS; idLauncher++ )
{
allPutters[idLauncher] = new Putter( queue, idListOrigin, idLauncher * 1000, ( idLauncher * 1000 ) + 1000 );
allPutters[idLauncher].start();
allGetters[idLauncher] = new Getter( queue, idListDest, idLauncher * 1000, ( idLauncher * 1000 ) + 1000 );
allGetters[idLauncher].start();
} // idLauncher = 0
// wait until everything has finished
for( int idLauncher = 0; idLauncher < NUM_THREADS; idLauncher++ )
{
try
{
allPutters[idLauncher].join();
allGetters[idLauncher].join();
}catch( InterruptedException e )
{}
}
System.out.print( "Check that the origin and destination data are correct....");
for( int nContOrig = 0; nContOrig < MAX_ID; nContOrig++ )
{
// check that the element idListOrigin[nContOrig]
// exists once and only once in the list idListDest
int appears = 0;
for( int nContDest = 0; nContDest < MAX_ID; nContDest++ )
{
if( idListOrigin[nContOrig].equals( idListDest[nContDest] ) )
{
appears++;
}
} // nContDest
if( appears != 1 )
{
System.out.println( "Element " + idListOrigin[nContOrig] + " appears " + appears + "times");
}
if( nContOrig % 1000 == 0 )
{
System.out.println( "Element number: " + nContOrig );
}
} // nContOrig
}
/**
* @param args
*/
public static void main(String[] args)
{
App app = new App();
app.run();
System.out.println( "Finished." );
}
}