Zdravím,
řešení problému je přečíst si JavaDoc k třídě java.lang.Thread.
Metodou interrupt() přerušíte běh vlákna, což dělá přesně to, co
popisujete. Metoda pro probuzení vlákna se jmenuje resume(), je
deprevated a v dokumentaci je napsáno, jak uspání a probuzení udělat
správně.
21.8.07, Martin Jedlička <[EMAIL PROTECTED]>:
> Zdravim,
> mam takovy problem s vlaknem. Mam nize uvedene vlakno, ktere po startu
> spustim s m_konec nastavenym na true, takze jde vlakno hned do spanku.
> Coz je dobre. Potom vlakno probudim metodou interrunt() a nastavim
> m_konec na false. V teto chvili ale chci, aby vlakno pokracovalo a
> provadel se cyklus do-while, ve kterem mam hlidani interrupted(). Toto
> hlidani tam mam z duvodu, kdy potrebuju predcasne ukoncit cele vlakno a
> prave se nachazi v tomto cyklu. Problem ale je, ze pri prvnim spusteni,
> kdyz provedu interrupt() tohoto vlakna (probuzeni), tak se prerusi hned
> i ten cyklus, coz nechci. Nevite nekdo, jak to obejit?
>
> Potrebuju od vlakna:
> - na zacatku uspat
> - pote probudit a pokracovat cyklem do-while
> - v pripade, ze je vlakno v cyklu do-while moct vlakno predcasne ukoncit
> z mainu.
> - toto vlakno je v nekonecnem cyklu a zastavuje se interruptem a
> nastavenim m_konec na tru
>
> Diky moc.
>
> Martin
>
>
>
> class Vlakno extends Thread {
> boolean dockal_se = false;
>
> public void run(){
>
> while(true) {
>
> if(m_konec) {
> try {
> Thread.sleep(dlouhy_cas);
> } catch (InterruptedException ex) {
> System.out.println("probuzeno");
> }
> }
>
> do {
> if (interrupted()) {
> return;
> }
>
> // cekani na neco..napr. na nastaveni nejake synch.
> glob. promenne v jinem vlakne
>
> } while(dockal_se);
> }
> }
> }
>
--
Filip Jirsák
[EMAIL PROTECTED]