2010-09-06 4 views
0

J'ai une fonction dans laquelle le traitement est donné à un nouveau thread.Comment faire pour que le thread en cours d'attente pour une fonction à retourner dans Java?

Le problème est que l'endroit où la fonction est appelée n'attend pas que la fonction retourne et exécute promptement le code qui existait après l'appel de la fonction. Comment est-ce que j'attends la fonction pour retourner ainsi aucun code après qu'il soit exécuté jusqu'à ce qu'il soit retourné?

J'espère ne pas être trop vague. Je suis encore nouveau au concept de multi-threading.

+0

Il se peut que vous n'ayez pas besoin de multi-thread dans ce scénario? c'est-à-dire que vous n'avez pas besoin de ces tâches pour exécuter de manière asynchrone peut-être? –

+1

J'ai peur que votre question * soit * trop vague. À moins que le code * appelant * n'appelle votre fonction d'un thread différent, il * attend * que votre fonction soit terminée ... mais ce n'est pas la même chose que d'attendre que votre * traitement * soit terminé. Si vous pouviez poster un programme court mais complet démontrant ce que vous voulez dire, cela rendrait la vie beaucoup plus facile. –

+0

Le code appelant est infact dans un thread différent (le thread principal). Un nouveau thread est créé dans la fonction en question. Je veux juste que le thread principal attende que cette fonction revienne. – Goutham

Répondre

0

Si la fonction doit attendre que le nouveau thread se termine avant de retourner, alors c'est ce que Thread.join() est pour.

+0

Merci. C'était ce que je voulais. – Goutham

2

Voici copier coller de la description de l'interface future JDK

interface ArchiveSearcher { String search(String target); } 
class App { 
    ExecutorService executor = ... 
    ArchiveSearcher searcher = ... 
    void showSearch(final String target) 
     throws InterruptedException { 
    Future<String> future 
     = executor.submit(new Callable<String>() { 
     public String call() { 
      return searcher.search(target); 
     }}); 
    displayOtherThings(); // do other things while searching 
    try { 
     displayText(future.get()); // use future 
    } catch (ExecutionException ex) { cleanup(); return; } 
    } 
} 

L'appel executor.submit - tâche forces à démarrer en fil autonome. L'invocation de future.get() attendra que la tâche soit terminée et renvoie la valeur.

0

Cest ce que Thread.join ou Object.wait/notify est fait pour.

Le code appelant est en fait dans un thread différent (le thread principal). Un nouveau thread est créé à l'intérieur de la fonction en question. Je veux juste que le thread principal attende cette fonction pour revenir.

int main() 
{ 
    Thread t = new Thread(...); 
    t.start(); 
    t.join(); 
} 

Ce fait exactement ce que vous voulez.

1

Quel est le point de démarrer un nouveau thread et attendre qu'il se termine? Vous obtenez le même effet en exécutant simplement l'exécution dans le thread en cours. C'est une autre chose si vous lancez un certain nombre de threads et que vous voulez attendre qu'ils soient tous terminés avant d'aller de l'avant.

Le point des threads est la concurrence, et vous n'en obtenez pas si vous êtes simplement inactif en attente de la fin d'un thread.

Questions connexes