No já myslím, že Petr bude ještě potřebovat nějakou synchronizaci až se data načtou.
V Tvém případě v JEE prostředí můžeš použít vlákna, protože tvoje metoda je vlastně synchronní, jen jistá část kódu se kvůli výkonu volá asynchronně. Akorát v těch vláknech nemůžeš používat JEE věci, jako je např. přístup k DB. Ale i tak by bylo pravděpodobně lepší použít některý z navrhovných způsobů. 2012/4/13 Jiří Chaloupka <[email protected]>: > V J2EE se namísto toho využije aplikační server a pomocí message se pošle > pokyn k vykonání nějaké asynchronní operace. > Podívejte se třeba na > http://www.java2s.com/Code/Java/EJB3/EJBTutorialfromJBossdemoformessagedrivenbean.htm > Protože jste toto asi ještě nepoužil, ještě napovím, že zpráva může být > různých typů včetně java.lang.Object > > Jirka Chaloupka > > Dne 13. dubna 2012 14:33 Petr Franta <[email protected]> napsal(a): > >> Chtěl jsem se zeptat na váš názor nebo zkušenost s prací ve vláknech J2EE >> aplikací? >> Četl jsem doporučení, že by se vlákna neměla v J2EE vytvářet resp., že >> jsou doporučené metody jak to bezpečně dělat (pomocí různých implementací >> timerů atd.). >> >> Řeším problém, kdy vlákno (request) potřebuje udělat tři dotazy do třech >> různých databází a ty sloučit do jednoho výsledku. Je velmi pomalé čekat na >> doběh jednotlivých dotazů, které jsou na sobě nezávislé. >> Navrhl jsem pro začátek něco takového viz. níže, ale nejsem si jist jestli >> tam není nějaká záludnost: >> >> /** definice pracovní třídy pro práci s DB (obsahuje vše potřebné k >> načtení dat) */ >> public class DbWorker implements Callable<Result> { >> ... >> } >> >> /** voláno z requestu */ >> ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS); >> List<Future<Result>> res = new ArrayList<Future<Integer>>(); >> >> for (DbTask task : tasks) { >> // načtení dat >> res.add(executor.submit(new DbWorker(task, ...))); >> } >> >> // čekej na dokončení vláken >> >> // Zpracování načtených dat >> for (Future<Integer> future : res) { >> System.out.println(future.get()); >> } >> >> Petr > > -- Ondra Medek
