ciao ragazzi ho un problema in pratica vorrei che venga eseguito un metodo esattamente dopo che finisce l'esecuzione di un metodo che al suo interno ha un thread:
Semaphore s;
s=new Semaphore(0);//nel costruttore
miometodo(){

moveCarta(ca);//chiama il thread
try {
s.acquire();

} catch (InterruptedException e) { e.printStackTrace();}

calcola();
}
codice:
        public synchronized void moveCarta(Carta v){    
        Thread runner=new Thread() { 
        public void run(){
            
            Point po=v.getLocation();
             int x=(int)po.getX();
             int y=(int)po.getY();    
              int i=0;
              p.reset(x,y);
        
                 while (i<30){
                        p.paintcarta(v,v.getposizione(),i);
                           i++;
                    try {
                       sleep(50);
                   } catch (Exception ex) {}
                    
               } 
              
            s.release(); 
         }  
       };
       runner.start();
    }


facendo cosi mi da la sequenzialità voluta ma non mi fa vedere la carta che si muove di un certo numero di passi(30).ho provato con join() con le lock e le condition ma mi da lo stesso risultato.
Come posso risolvere questo problema?