praegune kellaaeg 17.06.2025 09:02:55
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
kevin3220
HV vaatleja
liitunud: 31.10.2011
|
18.02.2014 21:58:22
Vajaks loogilist seletust |
|
|
Tere,
Selline loll küsimus, et mul on väike koodi jupp, millest ma ei saa aru ;(
public synchronized void start(){
running=true;
thread=new Thread(this);
thread.start();
};
public void run(){
System.out.println("Teema alustatud!");
}
|
Probleem siis seisneb, et mida tähendab 1) synchronized ?
2) Mida see this otseselt teeb?
Kui asendasin, this null-iga siis, kõik töötas nagu peaks, aga ei käivitatud run() meetodit. Et probleem siis seisneb selles, mida this teeb. Ma saan aru nagu ta tähendab seal, et jooksuta seda klassi, aga kui selle asemele kirjutada Game(), mis on selle klassi nimi, annab Java errori ?
Miks, ma oleksin väga tänulik kui keegi saaks eesti keeles seda mulle seletada, sest ma vaatasin eesti keelset jaava sõnastiku jne. Aga aru ma ei saa...
Tänud, ette!
|
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
19.02.2014 09:42:42
Re: Vajaks loogilist seletust |
|
|
kevin3220 kirjutas: |
Tere,
Selline loll küsimus, et mul on väike koodi jupp, millest ma ei saa aru ;(
java:
|
public synchronized void start(){ running=true; thread.start(); } public void run(){ System. out. println("Teema alustatud!"); }
|
Probleem siis seisneb, et mida tähendab 1) synchronized ?
2) Mida see this otseselt teeb?
Kui asendasin, this null-iga siis, kõik töötas nagu peaks, aga ei käivitatud run() meetodit. Et probleem siis seisneb selles, mida this teeb. Ma saan aru nagu ta tähendab seal, et jooksuta seda klassi, aga kui selle asemele kirjutada Game(), mis on selle klassi nimi, annab Java errori ?
Miks, ma oleksin väga tänulik kui keegi saaks eesti keeles seda mulle seletada, sest ma vaatasin eesti keelset jaava sõnastiku jne. Aga aru ma ei saa...
Tänud, ette! |
1) Synchronized on võtmesõna, mis märgistab meetodi ära selliselt, et seda ei saaks mitu korda paralleelselt käivitada. Oluline on see siis, kui su programmil on mitu paralleelselt jooksvat lõime (inglisekeelne märksõna multithreading), mis kasutavad ühiseid ressursse. Tihti on oluline, et ligipääs neile oleks järjestikune, mitte paralleelne, seega märgistatakse kriitilised koodilõigud synchronized võtmesõnaga. Sel juhul kui üks lõim käivitab meetodi ja järgmine soovib sama meetodit käivitada, siis ta peab ootama, kuni eelmine lõim on selle meetodi läbinud enne, kui tal alustada lubatakse. Multithreading kui selline on üks suur ja keeruline teema, millega on väga kerge endal jalga kahuriga otsast ära lasta, seega parem ei tasuks seda torkida enne, kui sa väga täpselt tead, mida sa teed.
2) This antud kontekstis tähendab sama, mis this igal pool mujal, ehk siis viitab käesolevale objektile. Ilmselt on seda näite alusel natuke parem seletada, täiendasin su koodi umbkaudu nagu sa ilmselt seda ise ette kujutasid:
java:
|
public class GameLauncher { public static void main (String[] args ) { Game m2ng = new Game(); m2ng.start(); } } public synchronized void start(){ running=true; thread.start(); }; public void run(){ System. out. println("Teema alustatud!"); } }
|
Sellises koodijupis "this" klassi Game sees viitab talle iseendale, konkreetsemalt, kui ma kutsun välja meetodi m2ng.start(), siis selle meetodi sees this tähendab konkreetselt seda m2ng objekti.
Miks sul ta this asemel Game() variandis ei töötanud .. ? Kas sa kirjutasidki ainult Game() või ikka new Game() nagu vaja on? Abiks oleks ka veateade siia kopeerida, "java error" ütleb ilma selgeltnägija kristallkuulita paraku väga vähe.
PS. Thread programmeerimises ei ole "teema" vaid "lõim"
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
kevin3220
HV vaatleja
liitunud: 31.10.2011
|
19.02.2014 17:59:47
Re: Vajaks loogilist seletust |
|
|
Fukiku kirjutas: |
kevin3220 kirjutas: |
Tere,
Selline loll küsimus, et mul on väike koodi jupp, millest ma ei saa aru ;(
java:
|
public synchronized void start(){ running=true; thread.start(); } public void run(){ System. out. println("Teema alustatud!"); }
|
Probleem siis seisneb, et mida tähendab 1) synchronized ?
2) Mida see this otseselt teeb?
Kui asendasin, this null-iga siis, kõik töötas nagu peaks, aga ei käivitatud run() meetodit. Et probleem siis seisneb selles, mida this teeb. Ma saan aru nagu ta tähendab seal, et jooksuta seda klassi, aga kui selle asemele kirjutada Game(), mis on selle klassi nimi, annab Java errori ?
Miks, ma oleksin väga tänulik kui keegi saaks eesti keeles seda mulle seletada, sest ma vaatasin eesti keelset jaava sõnastiku jne. Aga aru ma ei saa...
Tänud, ette! |
1) Synchronized on võtmesõna, mis märgistab meetodi ära selliselt, et seda ei saaks mitu korda paralleelselt käivitada. Oluline on see siis, kui su programmil on mitu paralleelselt jooksvat lõime (inglisekeelne märksõna multithreading), mis kasutavad ühiseid ressursse. Tihti on oluline, et ligipääs neile oleks järjestikune, mitte paralleelne, seega märgistatakse kriitilised koodilõigud synchronized võtmesõnaga. Sel juhul kui üks lõim käivitab meetodi ja järgmine soovib sama meetodit käivitada, siis ta peab ootama, kuni eelmine lõim on selle meetodi läbinud enne, kui tal alustada lubatakse. Multithreading kui selline on üks suur ja keeruline teema, millega on väga kerge endal jalga kahuriga otsast ära lasta, seega parem ei tasuks seda torkida enne, kui sa väga täpselt tead, mida sa teed.
2) This antud kontekstis tähendab sama, mis this igal pool mujal, ehk siis viitab käesolevale objektile. Ilmselt on seda näite alusel natuke parem seletada, täiendasin su koodi umbkaudu nagu sa ilmselt seda ise ette kujutasid:
java:
|
public class GameLauncher { public static void main (String[] args ) { Game m2ng = new Game(); m2ng.start(); } } public synchronized void start(){ running=true; thread.start(); }; public void run(){ System. out. println("Teema alustatud!"); } }
|
Sellises koodijupis "this" klassi Game sees viitab talle iseendale, konkreetsemalt, kui ma kutsun välja meetodi m2ng.start(), siis selle meetodi sees this tähendab konkreetselt seda m2ng objekti.
Miks sul ta this asemel Game() variandis ei töötanud .. ? Kas sa kirjutasidki ainult Game() või ikka new Game() nagu vaja on? Abiks oleks ka veateade siia kopeerida, "java error" ütleb ilma selgeltnägija kristallkuulita paraku väga vähe.
PS. Thread programmeerimises ei ole "teema" vaid "lõim"  |
Suured suured suured tänud sulle Aitasid mind hädast välja, leiduks sinu suguseid internetis veelgi...
|
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|