Olá RoniMALK,
Eu não entendi direito o que você quis fazer com esse seu relógio… mas mesmo assim, tem algumas coisas erradas aí:
-
Thread t = new Thread();
t.run();
Aqui você tá criando uma nova Thread e chamando o método run() dela (o que NÃO é a mesma coisa que iniciar a Thread). O que você quer fazer aqui? O método run() não vai fazer nada, porque sua Thread é nova… A lógica desse seu método que eu não entendi, mas deixa pra lá.
-
long fim, inicio;
Relogio rel = new Relogio();
try{
rel.start();
inicio = System.currentTimeMillis();
Se você quer marcar o tempo de execução da Thread do Relogio, você deveria colocar o valor de início ANTES de chamar o método (você começa a marcar o tempo de um cara nadando exatamente antes de ele começar a nadar, né?) e deveria colocar o valor de fim exatamente depois da execução dele. Mas aí tem um problema: uma Thread (por ser uma Thread) executa em outro plano de execução separado, diferente da Thread que gerou ela - no caso, o seu programa. Então, você manda marcar o tempo do método lá, chama o método, e depois pega o tempo depois dele. Mas a Thread não necessariamente terminou, porque ela é executada separadamente. O que eu to querendo dizer é que fora de uma Thread, você não vai conseguir marcar o tempo de execução dela (pelo menos eu não consigo pensar agora).
Eu ainda não entendi o que você quer fazer… se você explicar melhor, eu posso ajudar melhor também. 
E outro detalhe: EVITE esses seus “catch” vazios. Você vai ter muita dor de cabeça com isso mais tarde.
Até mais,