Hmm ja, toch vind ik Misfire's manier om een thread te beeindigen niet de meest nette. Punt is namelijk dat je op het moment van interrupten geen idee hebt waar in de executie flow je precies zit in de executie van je run methode.
Meestal zal het wel meevallen, maar ikzelf zou liever de boel gecontroleerder willen onderbreken. En dat zou ikzelf doen middels het zetten van een status vlag zoals al eerder beschreven. Daarmee vraag je aan de thread om te stoppen, in plaats van hem bruut een schop te verkopen. Want een interrupt genereerd toch een exception op het huidige locatie van de executie pointer.
De interrupt execption maakt dat je in principe in een ongedefinieerde toestand komt in de onderbroken thread. Je weet niet waarde code precies was en wat wel en niet af was op het moment van interrupten. Dit hoeft niet erg te zijn, maar ik kan me voorstellen dat er wel situaties te bedenken zijn waar je niet zo blij van wordt. Enkel voor het onderbreken van IO zou ik geneigd zijn om interrupts te gebruiken en dan nog moet je gebruik maken van een interruptable channel.
Wat betreft het gegeven code voorbeeldje van Misfire, gebruik ipv:
Java:
1
| while (!Thread.interrupted()) { // controleren op interrupt vlag. |
deze constructie:
Java:
1
| while (!Thread.isInterrupted()) { // controleren op interrupt vlag. |
isInterupted zet namelijk niet de interrupted vlag terug naar false. Scheelt weer een statement.
En dat maakt dit statement weer overbodig:
Java:
1
| Thread.currentThread().interrupt(); |
[
Voor 18% gewijzigd door
The - DDD op 04-12-2006 11:08
]