Diskuze: Vlákna
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
metody Resume() a Suspend() jsou zastaralé a mám ten dojem že byly i odebrány.
Možná použít tohle:
while(pozasteveno){
vlakno.wait();
}
pozastaveno je proměnná typu boolean, kterou nastavuješ dle potřeby. Nejsem doma u pc, ale mám dojem že by to mělo normálně fungovat.
Thread.Suspend() mohlo vlákno uspat na libovolném místě, což nemusí být úplně optimalni a threadsafe.
Muzes si treba vytvorit objekt typu ManualResetEvent, na ktery uvidej obe vlakna
a pak v hlavnim vlakne ho uspis pres jeho funkci .Reset() a spustit pres .Set()
a ve vedlejsim vlakne na uspavanem miste zavolas jeho .Wait()
mas pak jistotu, ze ti to vlakno vzdy usne az po dokonceni veskere prace, ktera se v tom miste provadela, presne v miste toho .Wait()
Už mi to jde uspat ale pořád ne probudit.
přidám pouze úryvek z mého kódu:
synchronized void pozastav() {
pozastavene = true;
}
// obnovení vlákna.
synchronized void obnov() {
pozastavene = false;
notify();
}
@Override
public void run(){
cycleTime = System.currentTimeMillis();
while(inGame){
atack();
sendMessage();
move();
synchronis();
repaint();
try {
synchronized (this) {
while (pozastavene) {
wait();
}
}
} catch (InterruptedException ex) {
Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void synchronis(){
cycleTime += DELAY;
long difference = cycleTime - System.currentTimeMillis();
try{
Thread.sleep(difference);
}
catch(InterruptedException e){
System.out.println(e.getMessage());
}
cycleTime = System.currentTimeMillis();
}
nevíte kde by mohla být chaba
Zobrazeno 10 zpráv z 10.