quote:
De functie naam zegt het toch al? Blokkeer voor altijd.
Op zich al erg genoeg dat ze een hele thread willen laten deadlocken, maar doe het dan wat efficienter. Bv zo:
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Object o = new Object();
while (true)
{
synchronized (o)
{
try
{
o.wait();
}
catch (InterruptedException e)
{
}
}
}
|
1) Geen catch all maar alleen de exception die gecaught MOET worden.
2) doe iets met die exception, al is het maar loggen
3) blocken dmv synchronisatie. Zolang er geen andere thread notify() of notifyAll() op dat object roept blijft hij wachten. Aangezien geen andere thread een reference naar dat object heeft gebeurt dat dus nooit. Alleen door de thread te interrupten kun je uit die o.wait() komen, hence the loop.
Op deze manier wordt de thread niet tenminste elke keer weer geactiveerd.
Dit prachtige stukje code komt trouwens uit een professioneel pakket dat wij gebruiken. Ditzelfde pakket krijgt het voor elkaar om, zodra je een mailtje van 10MB opent, het geheugengebruik met zo'n 180MB te laten toenemen. Sluit je het mailtje dan wordt dat geheugen niet vrijgegeven, en als je hetzelfde mailtje nog een keer opent neemt het programma gewoon nog meer geheugen in beslag.
Needless to say dat het regelmatig voorkomt dat er OutOfMemoryErrors worden gethrowd wanneer je grote emails opent.