====== Java, Thread e trabocchetti ====== ''A cura di Flavio Casadei Della Chiesa'' ---- '''Cerco Aiuto'''. Ho bisogno di qualcuno che mi dia una mano a tradurre in inglese le mie slide. Inoltre avrei bisogno di un supporto grafico per dare un "rimbellimento" ..... Chiaramente l'unica ricompensa sarà la gloria :) Inoltre potreste essere d'aiuto anche traducendo a modino la pagina inglese JavaThreadPitfalls ... ve ne sarei infinitamente grato. ---- Purtroppo chi non ha frequentato una facoltà scientifica ad indirizzo informatico e lavora nel campo dell'informatica in genere non ha la più pallida idea di cosa siamo i problemi legati alla programmazione concorrente; peggio ancora non sa neanche che dovrebbe saperli in quanto i Thread (in Java) sono ovunque. Sto quindi elaborando alcune slide che spero serviranno a dare uno spunto per uno studio più approfondito sulla materia. Spesso si utilizzano tecniche del tipo [[CheckThenAct]] oppure di tipo [[PutIfAbsent]] non opportunamente ''sincronizzate'' e si tende a giustificare la soluzione con un ''non è mai successo niente! quindi va bene così'' (una specie di San Tommaso per intenderci). Nelle slide presenterò anche una serie di ''antipattern'' della programmazione concorrente, molti presi da casi reali. Non penso si essere un esperto di Thread, deadlock e di sistemi concorrenti o distribuiti; mi spaventa comunque la devastante ignoranza dei "professionisti" dell'informatica su tali argomenti, ritengo quindi di avere "purtroppo" una preparazione ben superiore alla media. Tornando alle slide queste sono divise in quattro parti ===== Prerequisiti ===== * Architettura di un moderno elaboratore * Registri cache e memoria * CPU, funzionamento. L'importanza della pipeline * Sistemi operativi * Ruolo del sistema operativo * processi * Lo scheduler * Processi vs Thread ===== Concetti introduttivi ===== * Computazioni asincrone * Casi banali di [[RaceCondition]] * Banale utilizzo della keyword synchronized * Registri, Memoria e Cache * Ottimizzazione aggressiva delle moderne piattaforme hardware * Problemi di visibilità della memoria e di riordino delle istruzioni * Cenni sul [[JavaMemoryModel]] * Keyword volatile * Keyword final ed oggetti immutabili * Problemi relativi alla costruzione di un oggetto * La [[TriadeDellaMorte]] ==== Problematiche ricorrenti ==== * Cenni su deadlock e starvation * Migliorare la performance dei blocchi synchronized * Azioni composte * Implementare un corretto [[PutIfAbsent]] * Modello wait() notify(), banali Latch e Lock * [[ConditionQueue]] e [[ConditionPredicate]] * ReadWriteLock, cenni ===== Nuova API di Java5 e comuni Antipattern ===== * Nuove API java.util.concurrent * Condition, Lach, Barrier e [[ReadWriteLock]] * Esempi di antipattern tra cui: [[UnsafePublication]] ([[UnsafeLazyInstantiation]]), [[NestedMonitorProblem]] e [[DoubleCheckedLockingIdiom]] ===== Download ===== E' stata aggiunta di recente sul sito (ma non sulle dispense) una parte relativa al [[NestedMonitorProblem| Nested Monitor Problem]] E' disponibile la {{:wiki:flaviothread.pdf|versione definitiva}} (a meno di correzioni ortografiche){{:java:jtt:flaviothread.pdf|}}