I'm just starting to get along with threads in Java and I need some code review, about interfaces, classes, managing threads, correct writing, secure threads, exposed objects etc.
Horse-Race Implementation:
package HorseRace;
public interface FinishingLine {
public void arrive(Horse h);
}
package HorseRace;
import java.util.Vector;
public class FinishingLineImpl implements FinishingLine {
Vector<String> Ranking = new Vector<String>(10);
public FinishingLineImpl(){}
@Override
public void arrive(Horse h) {
// TODO Auto-generated method stub
Ranking.add(h.getId());
}
public void print()
{
for (int i = 0; i < 10 ; i++)
{
System.out.println("Place " + (i + 1)+ " is : " + Ranking.get(i));
}
}
}
package HorseRace;
public interface Horse {
public void run();
public String getId();
}
package HorseRace;
import java.util.Random;
public class HorseImpl implements Horse,Runnable {
int _distance;
String _id;
FinishingLine _f;
public HorseImpl(String id, FinishingLine f)
{
_id = id;
_distance = 0;
_f = f;
}
@Override
public void run() {
// TODO Auto-generated method stub
Random rand = new Random();
int n = rand.nextInt(10) + 1;
while (_distance < 100)
{
try
{
Thread.sleep(n);
}
catch (Exception e)
{
e.printStackTrace();
}
_distance += 1;
}
_f.arrive(this);
}
@Override
public String getId() {
// TODO Auto-generated method stud
return _id;
}
}
package HorseRace;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
ExecutorService e = Executors.newFixedThreadPool(10);
FinishingLineImpl f = new FinishingLineImpl();
for (int i = 0; i<10 ; i++)
{
System.out.println("Creating a horse with id = " + (i+1));
String strI = Integer.toString(i+1);
HorseImpl h = new HorseImpl(strI,f);
e.execute(h);
}
e.shutdown();
e.awaitTermination(60000, TimeUnit.SECONDS);
f.print();
}
}