2011-01-17 3 views
2

Si j'ai un tableau statique qui ne change pas après avoir été rempli. Plusieurs threads peuvent lire ce tableau en même temps, n'est-ce pas? Je crois que des problèmes surgissent quand un thread essaye de lire le tableau tandis qu'un autre le modifie.Question de fil de données simple - java

Nous vous remercions de votre réponse.

Répondre

3

N'accédez simplement pas à plusieurs threads lorsque le tableau est rempli. Si rien ne modifie les données (lectures seulement) alors vous devriez aller bien. Vos hypothèses sont correctes.

0

Oui, exactement. Google "région critique" pour plus de détails.

0

Pour éviter que plusieurs threads accèdent aux mêmes données au même moment, vous devez utiliser synchronized.

0

Oui, tant que tout est en lecture seule, tout ira bien. Assurez-vous simplement qu'aucun thread n'essaie de lire tandis que le tableau est rempli (par exemple s'il est peuplé paresseusement).

0

Oui, les lectures de données sont thread-safe - c'est seulement lorsque vous modifiez les données que vous devez être concerné.

0

Je suis sûr que vous avez déjà vous répondre maintenant grâce aux réponses ci-dessus. Puisque vous travaillez avec plusieurs threads, je suppose que vous travaillez avec plusieurs cœurs soit sur la même puce ou distribués. Dans les deux cas, il y a quelque chose que vous pouvez faire pour améliorer les performances: Laisser tous les threads avoir une copie des données comme c'est l'accès en lecture seule. De cette façon, ils peuvent utiliser efficacement les caches ou la mémoire locale et éviter de lire des liens interprocesseurs inter-core. Ceci est évidemment irréalisable si le tableau est trop grand (plus grand que le cache le plus grand).