Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prekid niti u javi

[es] :: Java :: Prekid niti u javi

[ Pregleda: 3199 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

fresh.bm

Član broj: 162156
Poruke: 182
*.broadband.blic.net.



+1 Profil

icon Prekid niti u javi28.06.2010. u 20:18 - pre 168 meseci
Pozdrav,

Ucim niti (thredove) u javi i naisao sam na problem.
Kako da prekinem izvrsavanje neke niti u zavisnosti od toga da li se neka druga nit zavrsila?
Imam za zadatak da napravim trku automobila tako sto bi se trkali kroz neku matricu, sve sam uspio da uradim osim da prekinem trku kada neki automobil stigne do kraja.
Svaki automobil je posebna nit. Postoji li mogucnost da pobjednicki automobil posalje globalni interupt za sve ostale niti?
Ili kako se to vec moze uraditi?
 
Odgovor na temu

Radovan__III
Radovan__III
Beograd

Član broj: 15669
Poruke: 1245
*.dynamic.isp.telekom.rs.



+26 Profil

icon Re: Prekid niti u javi28.06.2010. u 20:32 - pre 168 meseci
Jedna klasa vodi i dodeljuje sve niti, i ti onda iz niti pozoves metod te klase koja prodje kroz sve niti i zaustavi ih.
Aj sad svi u biblioteku da nesto pojedemo i popijemo ...
--------------------------------
Knjigovodstvo

 
Odgovor na temu

Nemanja Dubravac
Nemanja Dubravac
Sombor / Wien

Član broj: 4621
Poruke: 955
*.15.14.vie.surfer.at.

Sajt: https://www.shpock.com


+3 Profil

icon Re: Prekid niti u javi28.06.2010. u 22:09 - pre 168 meseci
http://java.sun.com/j2se/1.4.2...hreadPrimitiveDeprecation.html

procitaj ovo pod "What should I use instead of Thread.stop?" (a možda ti i "How do I stop a thread that waits for long periods (e.g., for input)?" bude trebalo, mada sumnjam)
 
Odgovor na temu

fresh.bm

Član broj: 162156
Poruke: 182
147.91.197.*



+1 Profil

icon Re: Prekid niti u javi29.06.2010. u 11:35 - pre 168 meseci
Hm, ipak nije to sto meni treba. Mozda sam se ja pogresno izrazio.
Evo stavicu kod pa mozda neko shvati gdje gresim.

Code:
public class Automobil {
  public String tipAutomobila;
  public String identifikacija;
  
  public Automobil(String tip, String id) {
    this.tipAutomobila = tip;
    this.identifikacija = id;
  } 
  
  public String print() {
    return this.tipAutomobila + " " + this.identifikacija;
  }
    
}

Ovo je klasa automobil, koja treba da sluzi samo kao identifikacija automobila.


Code:
import java.io.*;
import java.util.*;

public class NitAuto implements Runnable {
  int [] staza;
  Automobil auto;
  int poz = 0;
  
  NitAuto(int [] s,Automobil a) throws IOException, InterruptedException
  { 
   
    Thread t = new Thread(this,"Nit automobila");
    staza = new int [s.length];
    staza = s;
    auto = a;
    
    t.start();
   
  }
  
  
  
  public void run() {
    
    
    try {
    while (poz != 14) {
      poz++;
      System.out.println(auto.print() + " poz: " + poz);
      
      if (staza[poz] == 1) {
        System.out.println("STOP!" + auto.print());
        Thread.sleep(5000);
      }
      
      if (Thread.interrupted()) {
        throw new InterruptedException();
      }
      
      Thread.sleep(2000);
    }
    
    System.out.println("Pobjednik je: ");
    System.out.println(auto.print());
    return;
    
    } catch(InterruptedException ex)
    {
      System.out.println("Do kraja ima jos: " + (14-poz));
    }
  }
}

Ovo je ta moja nit koju sam napravio da implementira run() metodu.

Code:
import java.util.*;
import java.io.*;
public class Simulacija {
  
  public static void main(String [] args) throws IOException, InterruptedException {
    
    int [][] staza = new int[3][15];
    for (int i=0; i<3; i++)
      for (int j=0; j<15; j++) 
      staza[i][j] = 0;
    
    for (int i=0; i<4; i++) {
      int p1 = (int)(Math.random()*100)%3;
      int p2 = (int)(Math.random()*100)%15;
      
      staza[p1][p2] = 1;
    }
    
    //Staza
    System.out.println("STAZA!");
    for (int i=0; i<3; i++) {
       for (int j=0; j<15; j++) {
       System.out.print(staza[i][j]);
       }
      System.out.println();
    }
    
    System.out.println();
   
    boolean kraj = false;
    
    Automobil a1 = new Automobil("golf","1");
    Automobil a2 = new Automobil("audi","2");
    Automobil a3 = new Automobil("ford","3");
    
    NitAuto nit1 = new NitAuto(staza[0],a1);
    NitAuto nit2 = new NitAuto(staza[1],a2);
    NitAuto nit3 = new NitAuto(staza[2],a3);    
         
  }
}

A ovo je simulacija trke.
Problem se javlja kada jedan automobil stigne do kraja, ispise se da je on pobjednik ali ostala dva automobila nastave trku.
Trebam napraviti da se druga dva automobila zaustave i da se ispise pozicija do koje su stigli u tom trenutku.


Dobio sam savjet da sinhronizujem ove niti i da onda posaljem notify() kada privi automobil zavrsi, ali ja to ne znam kako.

Pa ako neko moze da me uputi ili da mi napravi ispravke mog koda. Eto, unaprijed hvala.
 
Odgovor na temu

themisfit1986

Član broj: 263428
Poruke: 4
*.dynamic.isp.telekom.rs.



Profil

icon Re: Prekid niti u javi02.07.2010. u 22:50 - pre 167 meseci
Gle, kad ti je metoda synchronized to u stvari znaci da samo jedna nit u jednom trenutku moze da ti izvrsava tu metodu..ne znam da li ti je poznat pojam "monitori"? Uglavnom, nisam mnogo gledao kod, ali mozes da npr stavis da kad automobil ispuni uslov da je pobedio u tom trenutku pozove synchronized metodu u kojoj svim ostalim automobilima ugasis nit, na primer sad mi samo pada na pamet da u run metodi imas na pocetku while(this.trajeTrka==true) { ..ovde tvoj kod za trku...} i onda iza while bloka stavis tamo da ti ispise to sto hoces. dokle su stigli. E, a u sinhronizovanoj metodi stavis lepo da taj prvi koj dodje svima setuje promenljivu "trajeTrka" na false. Njemu ce pisati da je stigao do kraja i ugasiti se, a onda ce i ostali da se pogase. E,sad moze da ti se desi da 2 automobila budu na istoj zavrsnoj poziciji zbog ovog sleep(2000) nakon pozicija++ tako da prvo ga uspavaj a posle inkrementiraj.
 
Odgovor na temu

[es] :: Java :: Prekid niti u javi

[ Pregleda: 3199 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.