2010-04-23 4 views
0

En Java, je souhaite télécharger des données de manière asynchrone dans un objet Thread (ou Runnable) et le thread place ses données dans un objet que j'ai déclaré dans mon thread principal.Fil Java, accès à l'objet dans le code principal

Comment est-ce que je pourrais faire ceci s'il vous plaît?

Répondre

0

Vous pouvez passer l'objet au constructeur du fil de téléchargement. Assurez-vous qu'il est thread-safe ...

1
  1. passe cet objet (collection?) À chaque fil (préféré)
  2. Déclarez un membre statique et l'accès statiquement.

De toute façon vous auriez besoin de synchroniser le "put". Ou, si elle est une collection, utilisez son équivalent java.util.concurrent (si elle existe)

Si vous ne voulez pas paralelize le téléchargement, mais simplement le lancer dans un autre thread, vous voudrez peut-être Callable au lieu de Runnable

3

Il serait préférable d'utiliser un FutureTask - avoir un thread séparé mettre des données dans l'objet du thread principal est sujette à des erreurs de synchronisation.

0

Vous devez passer l'objet dans le constructeur du Thread et l'affecter à un champ. Ceci, bien sûr, conduit à des problèmes de synchronisation car cet objet sera "touché" par les deux threads, vous devez donc utiliser un schéma de protection approprié.

0

Cela dépend de vos besoins de synchronisation. Avez-vous besoin de modifier les objets des deux threads ou est-il lu uniquement à partir du thread principal? Quoi qu'il en soit la méthode la plus simple consiste à utiliser synchronized code:

fil conducteur:

public setObject(Object obj) { 
    synchronized(this) { 
     this.obj = obj; 
    } 
} 

Appelez la méthode ci-dessus à partir du second fil. Vous pouvez également utiliser LockObjects. Regardez également la classe Exchanger.

Questions connexes