Java Thread

Programovacie jazyky, rady, poradňa...
Pascalwb
Addict
Addict
Príspevky: 3108
Registrovaný: 09 feb 2010, 23:26

Java Thread

Príspevok od používateľa Pascalwb »

Zdravim, potreboval by som pomoct s vlaknami v jave, som uplny zaciatocnik, a nejak som neprisiel nato ako ich pouzit v mojom pripade.

Kód: Vybrať všetko

public class Stroj {
	
	int naklad = 0;
	int nosnost;
           boolean plny = false;
	
	public int naloz(int n, Hlina h){
		if ((naklad +n )<= nosnost){
			naklad = naklad + n;
			h.kopHlinu(n);
		}
		else{
			plny = true;
			int a = nosnost-naklad;
			naklad = naklad + (a);
			plny = true;
			h.kopHlinu(a);
		      }
		return naklad;
	}

Kód: Vybrať všetko

public class Kamion extends Stroj{
	int nosnost = 100;
	int naklad = 0;

	public int naloz(int n, Hlina h){
		if ((naklad +n )<= nosnost){
			naklad = naklad + n;
			h.kopHlinu(n);
		}
		else{
			plny = true;
			int a = nosnost-naklad;
			naklad = naklad + a;
			plny = true;
			h.kopHlinu(a);
			
			
		}
		
		if (naklad == nosnost)
			{
			plny = true;
			}
		
		System.out.println("Naklad: " + naklad + " plny = " + plny);
		return naklad;
		
	}	
}

Kód: Vybrať všetko

public class pracovnyDen {


	public static void main(String[] args) {
                                    
                     Hlina hlina = new Hlina();
	          Stroj stroj[] = new Stroj[2];

                     for (int n=0; n<2; n++ ){
	         stroj[n] = new Kamion();     
		}
                                 for (int i=0; i<20; i++ ){
			robotnik[i] = new Robotnik();  
                                  }

                                   int j = 0;
                                  for (int i=0; i<20; i++){  
				
				robotnik[i].pracuj(hlina, stroj[j]);
				
					if (stroj[j].plny == true){
												
						j++;
						if (j >= 2){
							j=0;	
						}
					
				
				
				
				
}
}
Snad to z tohoto niekto pochopi, cize mam triedu Kamion, ktory ma nejaku nosnost. Tam donho sa akoze naklada a ak je stroj[0] plny prejde sa na stroj[1]. A takto stale dokola. chcel by som spravit, ze akonahle bude stroj[0] plny = true. tak by proste program isiel dalej na stroj[1], ale zaroven by bola nejaka funkcia so spomalenim, po ktorom by sa nastavila hodnota plny = false. Alebo ak sa to da aj nejak inac bez delay-u. Cize program by bezal, postupne by sa tie Kamiony akoze zaplnali, ale zaroven, by sa od zaciatku 0 1 .... vyprazdnovali tj. plny by sa zmenilo na false.

Niekto kto by vedel, ako to tam pouzit?

Dakujem
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: Java Thread

Príspevok od používateľa mirak2 »

na to ti netreba vlakna, staci na spravne miesto v programe pchat Thread.sleep(timeInMiliseconds) a tym padom uspavat/spomalovat program...a drbnut to do nejakeho nekonecneho cyklu, kde nahoda rozhoduje o tom, ci sa plny kamion uz zacne vyprazdnovat alebo nie.

//prepac, ale mne sa nechce hrabat v tom tvojom vysoko necitatelnom kode a rozmyslat, co chce byt co...a na kodenie hovadin odznova nemam cas 8)
Pascalwb
Addict
Addict
Príspevky: 3108
Registrovaný: 09 feb 2010, 23:26

Re: Java Thread

Príspevok od používateľa Pascalwb »

A nevedel by si poradit, kam ich dat, ak ich dam do toho else v maine ten delay, tak to proste len spomaly.

//autoeditácia príspevku (07 Apr 2012, 11:37)
A kebyze to takto zjednoduším.

Kód: Vybrať všetko

int j = 0;
for (int i=0; i<20; i++){  
  robotnik[i].pracuj(hlina, stroj[j]); 
  if (stroj[j].plny == true){   //Ked je stroj j plny

   //stroj[j].plny = false;      Toto by som tu potreboval napchať, ale aby to vykonávalo nejaký čas a medzitým pokračoval ďalej. Ak som tam dal ten delay v nekonečnom while cykle, napísalo, nedosiahnutelný kód. 

    j++;                            //Ide na dalsi
    if (j >= 2)                    //Ak uz to bol posledny stroj
      {
      j=0;                         //Ide zase na prvy
      }           
  }
}

Stačilo by mi povedať, kam asi dať ten delay, alebo, že ako to funguje, ten delay sposobí prerušenie toho vykonávaného cyklu? A pokračuje ďalej kým neuvidí ďalši delay a skočí na ten prvý? Či úplne zle som to pochopil?
Rion
Expert
Expert
Príspevky: 192
Registrovaný: 23 okt 2010, 20:13

Re: Java Thread

Príspevok od používateľa Rion »

Nie som si istý či na to potrebuješ vlákna, nestačí ti while?
Napísať odpoveď