Diskuze: Vlákna

Java Java Vlákna

Avatar
Karel
Neregistrovaný
Avatar
Karel:

Prosím Vás jak udělat moderně příkazy:
Thread.Resume();
Thread.Suspend();

//beru jakoukoli alternativu díky.

 
Odpovědět 24.9.2013 22:00
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Karel
David Čápka:

Na práci s vlákny přeci není nic zastaralého.

Nahoru Odpovědět 25.9.2013 8:41
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na David Čápka
Milan Gallas:

metody Resume() a Suspend() jsou zastaralé a mám ten dojem že byly i odebrány.

 
Nahoru Odpovědět 25.9.2013 12:37
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na Karel
Milan Gallas:

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.

Editováno 25.9.2013 12:40
 
Nahoru Odpovědět 25.9.2013 12:40
Avatar
Odpovídá na Karel
Luboš Běhounek (Satik):

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()

Editováno 25.9.2013 13:05
Nahoru Odpovědět 25.9.2013 13:04
:)
Avatar
Karel
Neregistrovaný
Avatar
Karel:

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

 
Nahoru Odpovědět 25.9.2013 19:23
Avatar
Karel
Neregistrovaný
Avatar
Karel:

a chyba hlášky:
Exception in thread "Thread-1" java.lang.Ille­galArgumentEx­ception: timeout value is negative.

 
Nahoru Odpovědět 25.9.2013 19:27
Avatar
Kit
Redaktor
Avatar
Odpovídá na Karel
Kit:

Ty snad umíš spát zápornou dobu?

Nahoru Odpovědět 25.9.2013 19:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Karel
Neregistrovaný
Avatar
Odpovídá na Kit
Karel:

Proč zápornou dobu?

 
Nahoru Odpovědět 25.9.2013 23:17
Avatar
Kit
Redaktor
Avatar
Odpovídá na Karel
Kit:

Však to píše: "timeout value is negative".

Nahoru Odpovědět 25.9.2013 23:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.