Je voudrais faire quelques trucs en Java qui serait plus claire si l'écrit en utilisant simultanément les routines, mais pour qui plein sur les threads sont sérieux exagéré. La réponse, bien sûr, est l'utilisation de coroutines, mais il ne semble pas être tout coroutine soutien dans les bibliothèques de base de Java et un rapide Google sur il apporte alléchant allusions ici ou là, mais rien d'important.
Voici ce que j'ai trouvé pour l'instant:
- JSIM a une coroutine classe, mais il semble assez lourd et amalgame, apparemment, avec fils à points. Le but de cela est de réduire la complexité d'enfilage, de ne pas ajouter à la c'. De plus je ne suis pas sûr que la classe peut être extraite à partir de la bibliothèque et de l'utiliser de façon autonome.
- Xalan a une coroutine ensemble de la classe qui ne coroutine-comme truc, mais c'est encore douteux si ce peuvent être utilement extraites de l'ensemble de la bibliothèque. Aussi, il semble que c'est implémenté comme un étroitement contrôlée forme de pool de threads, non en tant que coroutines.
- Il y a un Google Code du projet qui ressemble à ce que je suis après, mais si quelque chose, il a l'air plus
poids lourd de l'utilisation de threads serait. Je suis fondamentalement nerveux de quelque chose qui nécessite un logiciel pour
modifier dynamiquement le bytecode JVM au moment de l'exécution de son travail. Cela paraît exagéré, et comme
quelque chose qui va causer plus de problèmes que de coroutines permettrait de résoudre. En outre, il semble comme il n'a pas
mettre en œuvre l'ensemble de la coroutine concept. Par mon regard sur elle donne un
yield
fonction qui ne renvoie à l'invocateur. Bon coroutines autoriseryield
s pour transférer le contrôle à tout connu coroutine directement. Fondamentalement, cette bibliothèque, poids lourd et effrayant qu'il est, ne vous donne qu'un soutien pour les itérateurs, pas pleinement général coroutines. - La ce qui est prometteur nommé Coroutine pour Java échoue parce que c'est une plate-forme spécifique (de toute évidence à l'aide de JNI) solution.
Et c'est tout ce que j'ai trouvé.
Je connais le natif de la JVM de soutien pour les coroutines dans le Da Vinci Machine et je connais aussi la JNI continuations astuce pour ce faire. Ce ne sont pas vraiment de bonne solution pour moi, cependant, que je ne serait pas nécessairement avoir le contrôle sur qui virtuelle ou une plate-forme mon code fonctionne sur. (En effet, toute manipulation de bytecode système de aurait à souffrir de problèmes similaires -- il serait préférable que ce pur Java, si possible. D'exécution du bytecode à la manipulation serait de me restreindre à partir de l'utilisation de ce sur Android, par exemple.)
Si quelqu'un avez des pointeurs? Est-ce même possible? Sinon, est-il possible en Java 7?
Edité pour ajouter:
Juste pour s'assurer que la confusion est contenue, cela est lié à la question de mon autre, mais pas les mêmes. Celui-ci est à la recherche d'un existant, la mise en œuvre, dans une tentative d'éviter de réinventer la roue inutilement. L'autre est une question relative à la façon dont on pourrait aller sur la mise en œuvre de coroutines en Java, cette question devrait-elle prouver sans réplique. Le but est de conserver les différentes questions sur des threads différents.
En outre modifié pour ajouter:
La réponse est sélectionné. Certains commentaire, cependant, est dans l'ordre. La bibliothèque a souligné n'est pas une coroutine de bibliothèque, donc techniquement il n'a pas répondu à ma question. Cela étant dit, cependant, il a deux arêtes sur le Google Code du projet lié ci-dessus:
- Les deux solutions de l'utilisation du bytecode de la manipulation, mais la bibliothèque sélectionnée permet statique de manipulation de bytecode qui le rend utilisable dans Android et d'autres non-conformes à la JVM des piles.
- Le Google Code du projet n'est pas de faire plein de coroutines. Alors que la réponse de bibliothèque n'a même pas de faire coroutines à tous, il fait quelque chose de plus important: il fournit une bonne, fondateur de l'outil pour roulement de ma propre complet de coroutines.