Diskuze: Java - tutoriály na přání
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 28 zpráv z 28.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Já bych byl rád za tutoriál o členění aplikace.
Teď jsem začal dost dělat se Swingem a AWT, ale prostě to tam prasím, jak
se mi to zrovna hodí.
Chtěl bych se dozvědět něco o tom, jak správně třídit zdrojáky, balíčky atd. při GUI aplikacích nebo Java aplikacích obecně.
Do konce prosince by jsi byl perfektní, ale mně vlastně stačí, když
článek vyjde.
Na toto zrovna nevím jak bych napsal článek To co ti dělá problém tak se
řeší OOPčkem (Objektově orientované programování) články jsou na to
zde: http://www.itnetwork.cz/java/oop
U aplikacích s grafickým rozhraní si nejdřív napiš jakokdyby "jádro"
aplikace v OOP a v GUI se jen budou posílat signály na řízení, tedy
odděluj logiku od grafiky. Třída s "okýnkem" bude obsahovat např. jen
instanci nějaké řídící třídy a poté jen tlačítka s listenery, které
budou posílat signály do řídící třídy.
Články jsem četl, ale já doufal v nějaký kratší článek s
jednoduchým ukázkovým programem.
Doufat můžeš no tak
já se pokusím něco vymyslet, ale nečekej nic dokonalého taky mně to
dělalo problémy a nemyslím si, že to teď dělím nějak dokonale
O víkendu na to mrknu...
Tady to máš: http://www.itnetwork.cz/…cha-evidence
Doufám že tam je to co potřebuješ
Kód už jsem nějak sesmolil, do konce tohoto týdne tu přibude článek i
s popisem jak to funguje
http://www.itnetwork.cz/…tmus-aes-256
Snad ti to trochu pomůže
Něco o vláknech by se hodilo, třeba ve spojení s android aplikací by to bylo ideální.
Odporuješ mým prvním dvou bodům. Z prvního, dělám jen návody na Java
SE, žádáš o propojení s Androidem. Z druhého, vlákna jsou široký pojem
je tam toho fakt hodně, musíš trochu upřesnit
Samotný multithreading složitý není, ale udělat správně synchronizaci vláken není vůbec žádná sranda.
To sice není, ale jak říkáš ta synchronizace je peklo u kterýho se musí pořádně přemýšlet. Jinak balíček concurrent obsahuje spoustu tříd na multithreading, které ulehčují práci, např. Lock, semafory, fronty a další.
Na ty jednodušší věci stačí i klíčové slovo "synchronized". Některé třídy jsou dokonce "thread-safe" a ve spoustě případů se s nimi dá vystačit.
A občas i volatile. Thread-safe třídy jsou fajn, třeba z Collections jdou vytvořit instance synchronizovaných kolekcí, nebo jejich nemodifikovatelná kopie a nebo taky StringBuffer je thread-safe, sice je pomalejší než StringBuilder, ale při multithreadingu se hodí víc.
volatile sice nějaké uplatnění má, ale zkus si třeba tohle:
/**
* Demonstrace chyby v praci nad spolecnym zdrojem
* Ctenari se omlouvam za antiobjektovost tohoto prikladu :-)
* @author Pavel Micka
*/
public class NonAtomicExample {
public volatile static int i = 0; //volatile == necachuj na procesoru
public static void main(String[] args) throws InterruptedException {
Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.start();
t2.start();
Thread.sleep(1000); //na vterinu uspime hlavni vlakno a nechame dve pridana pracovat
System.out.println(i); //melo by byt 20000
}
}
class MyThread extends Thread {
@Override
public void run() {
for(int i = 0; i < 10000; i++) {
NonAtomicExample.i++; // NonAtomicExample.i = NonAtomicExample.i + 1 - dve operace: scitani a prirazeni
}
}
}
Neumis poskladat pod sebe nekolik tlacitek? Nebo co si mam pod tim menu predstavit?
Volatile se pouziva vyhradne jen pro cteni nejake hodnoty ve vice vlaknech, kdyz do ni zapisuje jedno vlakno, rozhodne nezarucuje zadnou synchronizaci, jen ze se pri cteni obsah promenne vzdy znovu nacte z pameti.
Tahle ukazka jen ukazuje, jak se to pouzivat nema
Proto jsem ji sem napsal. Když si to spustíš, dostaneš nesmyslný výsledek. Rozhodně jsem tím nechtěl ukázat, jak se to má dělat.
Vlastně mě ani nenapadlo, k čemu bych volatile použil, ale právě jsi jeden důvod uvedl.
Volatile se používá, když chceš v jednom vlákně do jedné proměnné zapisovat a ve druhém z ní číst, dáváš tím kompilátoru najevo, že se proměnná může měnit někde jinde (jiné vlákno, OS, HW), takže nebude provádět některé optimalizace a při každém čtení její hodnoty bude tu hodnotu číst z paměti.
Např. pokud si z jednoho vlákna do druhýho předáváš přes nějakou bool proměnnou, jestli už je nějaká akce dokončena, měl bys ji mít označenou jako volatile.
Kompilátor může dělat psí kusy, třeba kód co napíšeš:
bool flag = true;
...
while (flag)
{
// čekání, až druhé vlákno změní flag
}
Pokud mu nedáš najevo, že je to proměnná, kam se přistupuje z více míst, může zoptimalizovat třeba na následující kód (a v release módu to udělá):
bool flag = true;
...
if (flag)
while (true)
{
// čekání, až druhé vlákno změní flag, kvůli optimalizaci se nedočkáme, protože to tady nebude mít vliv.
}
Tady máš C# kód, na kterém to je vidět (předpokládám, že v javě je to stejné/podobné):
Když ho spustíš v debug módu, tak po půl vteřině vypisování se
ukončí (protože se ty optimalizace neprovedou).
Když ho spustíš v Release a bez
debugování , tak program poběží do nekonečna.
Nekonečné smyčky nepoužívám, podle mne je většinou lepší využít Observer.
......... no to je jedno, vidím že nemáš náladu. Nemusíš mě hned sežrat.
Ne tak to mas vic upresnit. Ja si pod pojmem menu predstavim nekolik tlacitek pod sebou, nevim co mas na mysli ty.
Teď mi nejde o grafiku ale o kod, jako jak mezi sebou ty metody souvisejí, aby když dám zpět tak se mi to zpět vrátilo bez ohledu na to kde jsem. Nevím jak to vysvětlit. Možná to bude jednoduchý, ale neumím si to představit. Ještě se tady porozhlédnu jestli nenajdu něco, na čem bych to pochopil.
Zvládl bys tutorial na databázi? Připojení k již vytvořené databázi, základní operace update, select, atd?
Zobrazeno 28 zpráv z 28.