Próbálkozom a thread-ekkel és elakadtam.
a run() metódusom szinkronizált, egy ciklusban a cnt mezőhöz hozzáad egyet, majd ki is von.
A main()-ben 500 msec-enként kiírom a cnt értékét. A kimenet hol 0, hol egy. Nyilván, a main() metódust futtató szál println-ja ''beüt'' a cnt-hez hozzáadó és abból kivonó utasítás közé. Hogy lehet ezt elkerülni?
class Counter1 {
static int cnt = 0;
static boolean end = false;
static class ModCounter implements Runnable {
public synchronized void run() {
while(!end){
cnt += 1;
cnt -= 1;
}
}
}
public static void main(String[] args)
throws InterruptedException{
ModCounter modc = new ModCounter();
Thread t1 = new Thread(modc);
t1.start();
for(int i=0; i<10; i++){
System.out.println(cnt);
Thread.sleep(500);
};
end = true;
t1.join();
System.out.println(cnt);
}
}
Kimenet:
0
1
1
0
0
1
1
1
0
1
0
Szeretném, ha csupa 0 jelenne meg.
Próbáltam a kiírást szinkronizálni:
synchronized (Counter1.class) {
System.out.println(cnt);
};
De semmi változás.
Előre is köszönöm
KL
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] [sziku69:] Szólánc.
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] Android másképp: Lineage OS és társai
- [Re:] [HThomas:] Kia Ceed SW JD vs CD tapasztalatok
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [Sub-ZeRo:] Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [ldave:] New Game Blitz - 2024
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
GAMEPOD.hu témák
Hozzászólások
loszerafin
senior tag
Eastman
őstag
Most találtam, ha valakit érdekel egy állás: [link]
mail: job@virgosystems.hu
https://logout.hu/tema/re_gerincserv_muteti_kezelese/keres.php?suser=Eastman ⮞ Műtét nélkül is lehet megoldás...
shev7
veterán
nezd meg ezt:
class Main {
static int cnt = 0;
static boolean end = false;
static Object lock = new Object();
static class ModCounter extends Thread {
public void run() {
while(!end) {
synchronized (lock) {
cnt += 1;
System.out.println(cnt);
cnt -= 1;
}
}
}
}
public static void main(String[] args)
throws InterruptedException{
ModCounter modc = new ModCounter();
ModCounter modc2 = new ModCounter();
modc.start();
modc2.start();
Thread.sleep(500);
end = true;
}
}
[Szerkesztve]
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
loszerafin
senior tag
Köszönöm, hogy foglalkozol a témával.
Közben kitaláltam egy megoldást (egy oldallal tovább kellett olvasnom a könyvben a wait()-ig)
class Counter2 {
static int cnt = 0;
static boolean end = false;
static class ModCounter implements Runnable {
public void run() {
while(!end){
synchronized (this) {
cnt += 1;
cnt -= 1;
notify();
}
}
}
}
public static void main(String[] args)
throws InterruptedException{
ModCounter modc = new ModCounter();
Thread t1 = new Thread(modc);
t1.start();
for(int i=0; i<10; i++){
Thread.sleep(500);
synchronized (modc) {
modc.wait();
System.out.println(cnt);
};
};
end = true;
t1.join();
System.out.println(cnt);
}
}
loszerafin
senior tag
Köszönöm, valóban jó megoldás egy lock objektum létrehozása:
class Counter3 {
static int cnt = 0;
static boolean end = false;
static Object lock = new Object();
static class ModCounter implements Runnable {
public void run() {
while(!end){
synchronized (lock) {
cnt += 1;
cnt -= 1;
}
}
}
}
public static void main(String[] args)
throws InterruptedException{
ModCounter modc = new ModCounter();
Thread t1 = new Thread(modc);
t1.start();
for(int i=0; i<10; i++){
Thread.sleep(500);
synchronized (lock) {
System.out.println(cnt);
};
};
end = true;
t1.join();
System.out.println(cnt);
}
}
(#856) loszerafin válasza loszerafin (#855) üzenetére
loszerafin
senior tag
Még annyit hozzáteszek azok kedvéért, akik később olvassák ezt a topicot:
Azt hiszem nem szerencsés egy több szálon futó programban olyan ciklust futtatni, amiben nincs Thread.sleep(), mert így nem hagyunk időt másik szálaknak a bekapcsolódásra, ráadásul zabálja a processzort, szóval
valami ilyesmi jobb, mint ami a fenti kódjaimban látható:
while(!end){
synchronized (lock) {
cnt += 1;
cnt -= 1;
};
try {
Thread.sleep(10);
} catch (InterruptedException e) {}
}
shev7
veterán
mivel a program alapesetben mast is csinal, nem csak a lockolt teruleten tolti az idejet ez nem szokott problemat okozni, de a te peldadban tenyleg jol jon egy kis sleep.
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
loszerafin
senior tag
Ha jól értem a JVM-ek működését az olvasmányaim alapján, akkor nincs garantálva, hogy időosztásosan működjenek a JVM-ek. Azaz, ha azt akarom, hogy a többi szál is labdába rúghasson, kell sleep()-et tennem a hosszan futó ciklusaimba. Vagy tévedek?
Tehát nem a lock az érdekes itt, hanem hogy egy szál nem engedi futni a többit, mert nincs benne sleep és sose áll le.
robisz
senior tag
Ha jól értem a JVM-ek működését az olvasmányaim alapján, akkor nincs garantálva, hogy időosztásosan működjenek a JVM-ek. Azaz, ha azt akarom, hogy a többi szál is labdába rúghasson, kell sleep()-et tennem a hosszan futó ciklusaimba.
Igazából a yield() metódust találták ki megoldásként erre problémára, de sajnos
kínszenvedés a használata mert nagyon nem egyértelmű mikor kell meghívni.
(Valami olyasmit lehet elképzelni, hogy pörgetsz egy számlálót a ciklusodban és
minden 10-edik futáskor meghívod a yield()-et vagy valami hasonló)
Szerencsére azonban ez a probléma a ''való életben'' elég ritkán fordul elő,
hisz az ember általában olyan szálakat ír amelyek egyébként is blokkolnak.
Pl. mert egy socket-ről akarsz olvasni vagy vársz egy beérkező üzenetre... stb.
loszerafin
senior tag
Igazából a yield() metódust találták ki megoldásként erre problémára, de sajnos
kínszenvedés a használata
Köszönöm, igaz, megnéztem még 1x. Azt írja a könyv, hogy a yield() átteszi a jelenleg futó szál állapotát runnable-be, ezáltal a scheduler választhat egy új szálat, amit futtatni fog.
Azonban nincs előírva, hogy a scheduler másik szálat válasszon, ezért lehet, hogy ugyanazt fogja futtatni, azaz előfordulhat, hogy a yield() tulajdonképpen nem csinált semmit.
Kicsit meg lehet spékelni az egészet a szálak prioritásával, de mivel a prioritást meg nem kötelező megvalósítania a JVM-eknek, kár a gőzért...
Sianis
addikt
Sziasztok!
Hogyan tudom megoldani, hogy egy osztályon belül két különböző paraméterszignatúrájú konstruktor közül az egyik meghívja a másikat?
Sianis
shev7
veterán
this(uj parameterek)
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Sianis
addikt
shev7 kolléga, te mindíg ki tudsz engem segíteni?
Sianis
sekli
addikt
helo topic,
Ezen az oldalon ([link]) van egy jatekocska, amit javaban irtak, na amikor ezt megtalaltam, akkor gondoltam, hogy de jo egyszeru, biztos jo kicsi a gepigenye, de aztan, hogy task managerban nezem, a procit 30-50% korul hasznalja (3.0Ghz P4), es 30mega ramot eszik... hat kicsit csalodott voltam, mert azt hittem, hogy egy P1-en is elfut majd... ez normalis egyebkent, hogy egy ilyen alkalmazas, amiben lenyegeben csak nehany pontbol allo sokszogek maszkalnak ide-oda ilyen gepigenyes...? persze, lehet, hogy rosszul van megirva, azzal nem tudok mit csinalni, egyreszt mert egyaltalan nem ismerem a java-t, masreszt nem en csinaltam... Esetleg valahogy mashogy futtatva lehet csokkenteni az etvagyat? most JRE 1.6-ot hasznalok...., (a forumaban a program keszitoje ugyan azt irta az 1.6 megjelenesekor, hogy ezzel jobb, mint 1.5-tel volt...)
loszerafin
senior tag
Sziasztok,
Kb. már tisztában vagyok a Java alapokkal, szerintetek hogyan tovább, mit tanuljak?
UML-t látom hasznosnak meg a Design Pattern-eket. Vagy esetleg mást?
Gondolkodtam a konkurrens programozás elméletén, ami jól jöhet a szálak írásakor, de ez talán csak később kellhet.
Azután itt van a unit tesztelés, javadoc, i18n.
Persze, gyakorlatot kellene szereznem, de nem akarok rossz (=gyenge minőségű) programokat írni, gyakorlás képpen sem.
Előre is köszönöm
KL
robisz
senior tag
Ha később komolyan akarsz Javazni, esetleg ilyen téren szeretnél dolgozni,
akkor egyet ajánlok: J2EE.
Ha a ''sima'' Java már elég jól megy, akkor mindenképp érdemes megismerkedni vele.
Az UML és a Design Pattern-ek ismerete mindig (de J2EE-hez különösen) jól jöhet!
shev7
veterán
a j2ee-vel az a baj, hogy tanulni nagyon nehez. Az alapokat elsajatithatod, de elesben fogod igazan megtanulni. A masik kerdes, hogy ejb2, vagy ejb3. Ugye a 3 sokkal konnyebben kezelheto, de a szokas hatalma miatt a 2 meg nagyon sokaig hasznalatban marad.
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Weier
csendes tag
Sziasztok!
Keresek valakit JDBC munkára.
Max pár óra alatt megcsinálható és nem ingyen kérem!
Akit érdekel, az írjon magánban. Sürgős!
Fisha
őstag
Velemenyem szerint elso korben jdbc, servletek jsp-k, aztan egy tetszoleges mvc framework. Persze ha az a cel, hogy a konnyen el tudj helyezkedni. Ilyen temakorben keresnek a legtobb embert. Aztan johetnek ejb-k egyebek.
Egyebkent maga az, hogy j2ee annyira tag fogalmkor, hogy nem igazan lehet azt mondani, hogy akkor en most j2ee-t tanulok.
Fisha
őstag
Ja meg az lemaradt, hogy ha kerdesed vana fenti temakorokben, akkor szivesen segitek. A topicot nem mindig olvasom, szoval ha surgos, akkor privi.
loszerafin
senior tag
Köszönöm, kedves tőled.
Rákeresek a rövidítésekre, azután nézek vmi doksit.
Kb fél éven belül akarok elhelyezkedni. Nagyon ráuntam a php-re.
Még megtámogatom magam egy scjp-vel. Addig is jó lenne
pár kisebb munka, nem baj, ha nem nagyon fizet.
sekli
addikt
up? [link]
loszerafin
senior tag
Megnéztem az oldalt, de nem találtam a játékot.
Ha nincs forrás fájl, nem hiszem, hogy sokat lehetne javítani a futási sebességen.
loszerafin
senior tag
debug üzenetek
Gondoltam jó lenne pár debug üzenet, és erre kézenfekvő az assert-et használni, úgyhogy csináltam egy Log osztályt:
class Log {
static int Level = 6;
public static boolean log(int level, String s){
if (level>=Level) System.out.println(s);
return(true);
}
public static boolean dlog(int level, String s){
if (level>=Level) {
new Throwable().printStackTrace();
log(level,s);
};
return(true);
}
}
Ezt a programban így lehet használni:
assert Log.log(5,''itt vagyok'');
assert Log.dlog(7,''itt vagyok'');
A log csak az üzenetet írja ki, a dlog a stack-et is.
Van erre valami bejáratott út, vagy megfelelő ez?
Előre is köszönöm
KL
Drizzt
nagyúr
Van egy frame-m, hiába csinálok rajta setSize-ot, nem változik meg a mérete, úgy rémlik, hogy még valami extra kéne ezek után a showon kívül, nem?
I am having fun staying poor.
loszerafin
senior tag
Én eléggé új vagyok a Javában, de a show az deprecated. setVisible(true) a menő 1.5 óta.
A setMinimumSize() beleszólhat a dologba.
Nálam awt-tal megy:
import java.awt.*;
import java.awt.event.*;
import javax.imageio.*;
import java.io.*;
import java.awt.image.*;
import java.util.*;
[...]
class MyFrame extends Frame implements Runnable{
[...]
MyFrame(){
[...]
setSize(100,100);
[...]
setVisible(true);
[...]
}
[...]
}
[Szerkesztve]
robisz
senior tag
Szia!
Logolásra a java.util.Logger osztály a megoldás (ez nem túl régen
került a Java-ba), vagy pedig a log4j csomag amit külön kell letölteni
és talán még az előbbinél is többen használják. Tudásban kb. ugyanaz a kettő.
Drizzt
nagyúr
Az volt a para, hogy a htm file bírálta felül. :S
Na más egyszerűbb kérdésem van. Appletet kell csinálni, írtam egy filet IntervalException.java néven, ahol van. Az importálásához kell még valami, hogy lássa? Elég idegesítő, hogy Unixon kell fejleszteni(ssh loginnal), így elég nehézkes, míg valamit kipróbálgtok...
I am having fun staying poor.
robisz
senior tag
Az volt a para, hogy a htm file bírálta felül.
Így kell működnie, html-ből lehet beállítani az applet méretét.
A másik kérdésed nem pontosan értem, ha nem ugyabban a package-ben vannak
akkor kell importálni.
Ha a lefordított class-t nem találja a Java akkor meg fel kell venni a classpath-ba,
vagy applet esetén úgyis egy jar-ba kell csomagolni őket.
Drizzt
nagyúr
Akkor a kérdés pontosan. Szóval van egy java fájlom, ami applet, s a htm megjeleníti. Kéne nekem egy exception leszármazott osztály intervalexception néven. Ha simán belerakom az eredeti javaba public class intervalexception extends exception, akkor azt írja ki, hogy ezt egy másik fájlban kellene definiálni. Na ekkor mit csináljak?
I am having fun staying poor.
shev7
veterán
rakd egy masik fajlba, es a ket java-t (az appletet meg az exception-t rakd jar-ba)
vagy ha csak az applet hasznalja az exception-t akkor legyen belso osztaly.
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Drizzt
nagyúr
Csak az Applet használná. Belső osztály az mit takar?
public class IntervalException extends Exception{
public IntervalException(String msg){
super(msg);
}
}
Ezen mit kéne változtatni? Gondolom valamelyik osztályba, vagy egyébbe kellene ezt belerakni?
I am having fun staying poor.
Drizzt
nagyúr
Tudna valaki egy választ dobni?
I am having fun staying poor.
shev7
veterán
a mar letezo applet classon belul definialod az osztalod pl:
public class MyApplet extends Applet {
class IntervalException extends Exception {
}
}
itt egy leiras: [link]
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Drizzt
nagyúr
Kösz, s egy másik kérdés: azt szeretném, hogy egy exceptiont dobjak, ha egy sztring nem ''V'', vagy ''D'', de ha egy if utáni feltétel részbe írnám őket or-ral összekapcsolva, akkor mindig azt mondja, hogy már korábban zárójelet vár. Mi lehet ilyenkor a megoldás? Néezegettm ezt-azt, de nem lettem sokkal okosabb... :S
I am having fun staying poor.
shev7
veterán
zarojelezd be oket kulon. Szerintem a precedenciaval van gond.
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Louies
tag
Sziasztok! HELP!
lenne egy kérésem vagy kérdésem.
egy programot kellene öszehozni nekem . teljesen egyszerü annak aki járt órára , de én nem járok be javara. Shell rendezést kellene csinálni, ugy, hogy mondjuk az elején megadok 5számot. és azt rendezi. Semmi extra. Pseudoban már megcsináltam Cben is , de java ban nem megy. ha ebben tudna valaii segíteni esetleg.?
''Okos ember leírja, ha érdekeset hall, a buta nem, mert azt hiszi, meg tudja jegyezni.''
sekli
addikt
nem en szeretnek javitani, hanem, erdekel a velemenyetek, hogy normalis-e, hogy egy ilyen program ennyit terhel..., a keszito szerint 90%-ot a ''grafika'' teszi ki...
[link] az oldal kozepe fele van egy tablazat: Tacticat Sailing Fields ott vannak a gombok, hogy S1, L1, t4... , arra kell kattintani, hogy elinduljon...
Sziasztok!
A legutóbbi win xp automatikus frissítésem óta néhány weboldal nem jön be, a többi pedig nagyon lassan.
A javascript console ilyet produkál:
[link]
Van valakinek ötlete mi lehet a gond?és mi a megoldás?
Köszönöm!
Louies
tag
idöközben sikerült tegnap este a C-->átírni javara. Ugyhogy tárgytalan a dolog.
''Okos ember leírja, ha érdekeset hall, a buta nem, mert azt hiszi, meg tudja jegyezni.''
loszerafin
senior tag
Hát, én nem tudok vitorlázni és ezt a programot valószínűleg elindítani sem. De ha el is indítanám se tudnám, mit hogy állítsak be rajta.
Bejött egy kép, bal felső sarokban feltehetően egy szélzsák meg kriksz-krakszok a képernyőn, de sehol egy ellenfél, akit le lehetne lőni ...
Ha most ehhez hozzáveszem, hogy mondjuk az emberek tudása a vitorlázásról (nagy átlagban) kb az enyémnek megfelelő szinten van és hogy az intelligenciám nem átlag alatti, akkor ez a fórum ennek a kérdésnek a megválaszolására nem alkalmas.
Miért nem írsz a játék fórumába?
A ''90%-ot a grafika teszi ki'' : ez sok minden lehet. A programkód 90%-a? a belefeccölt munka 90%-a? A futásidő 90%-a?
Ez egy szimulátor, és ha a hajókat tényleg a szél lökdösi, meg a vitorlákat lehet állítani (és még ki tudja mit) és többen is vagytok egyszerre (hálózatos a játék), korántsem gondolnám triviális feladatnak és még csak megbecsülni se tudom, milyen nehéz kiszámolni az egyes hajók adatait (pl. hely, irány, sebesség) és az algoritmus meddig fut.
Azt gondolom, próbáld ki egy gyengébb gépen, ha lassú, kérdezz a fejlesztőtől.
loszerafin
senior tag
Próbálkozz a ''Mozilla Firefox'' vagy a ''Windows XP kérdések és válaszok'' topikban.
Forest_roby
őstag
HI!
Ma írok java server oldali programozásból - még csak a nagyon alapokból, de mivel én soha nem tanultam java-t, ez így egy kicsit nehéz lesz(, ha nem inkább lehetetlen), nem tudom minek vettem fel ez az órát - egy kis segítséget kérnék.
Van egy ablak, benne egy táblázat, és a cellákba egy adatbázisból tölti be az adatokat.
Ez idáig elvileg működik.
A feladat az lenne, hogy ha módosítok egy cella tartalmát, akkor az adatbázisban is módosuljon az adott cellához tartozó érték.
Ebben tudnátok segíteni?
( ha kell tudok küldeni programot, annak akit érdekel )
Előre is köszönöm!
Forest
-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
Köszi!
Az xp-ben már írtam,de nem válaszolt senki.
Megpróbálom a firefox-ost.
(#896) loszerafin válasza Forest_roby (#894) üzenetére
loszerafin
senior tag
És mi nem megy?
1. Server oldalon nem tudod módosítani az adatbázist? (SQL gondok/Java sql használat gondok/
2. Serverprogramod nem tudja elkapni az adatokat?
3. html Weboldaladból nem tudod elküldeni az adatokat? (form/ajax probléma)
4. Java appletből nem tudod elküldeni az adatokat a szerver felé?
Talán ezek segítenek:
1. [link]
3. [link]
3. [link]
[Szerkesztve]
(#897) Forest_roby válasza loszerafin (#896) üzenetére
Forest_roby
őstag
1órát késtél a válasszal!
Hogy mi nem megy?
Az idáig működő részeket se látom át (igazán)...
Innentől kezdve meg az egész gáz...
pl az adatmódosítást hogyan érzékeli a program(, vagy gombenyomásra update-eljen)?
az update megírása se igazán megy...
Nincsenek nagy problémáim, csak nem értem az egészet!
mod: de mostmár mindegy!
[Szerkesztve]
-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
(#898) loszerafin válasza Forest_roby (#897) üzenetére
loszerafin
senior tag
Sajnálom, hogy késtem 1 órát, de úgy érzem, ha 1 héttel ezelőtt írok, az is késésben lenne.
Amit javaslok:
Egy gyors Java alapok:
http://java.sun.com/docs/books/tutorial/
(Erre 1 hét elég lehet, ha nagyon nekifekszel, 3 nap /napi 4 óra alvással/)
Learning the Java language, Essential java classes, Collections, Deployment
Ezután JDBC:
http://java.sun.com/docs/books/tutorial/jdbc/index.html
Majd ez (bár ez egy monstrum, úgyhogy szelektálnod kell, viszont én nem ismerem a Javat eléggé, hogy ebben segítsek)
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/
És nem árt némi AJAX ismeret (szerintem):
http://www.w3schools.com/ajax/default.asp
Ehhez persze JavaScript, css és html tudás is kell, amit szintén megszerezhetsz a w3schools oldalain.
loszerafin
senior tag
Köszi a logger osztály infót.
Megnéztem egy kissé, de nekem elsősorban debug-oláshoz kell, azaz jó lenne, ha eltűnne a kódbol mikor készen vagyok. Ezért jó az assert-es megoldás.
Téma tudnivalók
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
Mai Hardverapró hirdetések
prémium kategóriában
ingyenes kategóriában
- 1 NAPOS AKCIÓ:Ryzen7-Asus TUF Tervező & Gaming FX505DA Laptop-Kitünő állapot-Legolcsóbban!!!
- Xiaomi Mi Max 3 64 GB-os
- 1 NAPOS AKCIÓ: Exkluziv,12.Generációs-Core i5-Érintős Dell Latitude 5430-2026-ig Világgaris-Mesés Ár
- Két laptop alkalmi áron! (Mindkettő Intel cpu - SSD - ddr3 - HDMI - USB 3.0 - jó akku)
- Ps5 Slim 1Tb közel 2 év Media Markt garancia