2010-09-03 14 views
8

OK Non sono solo nuovo alla concorrenza in java ma sono anche abbastanza nuovo per la programmazione Java. Ho provato a capire la concorrenza dei tutorial di java, ho provato a leggere Concurrency in pratica ma sembrava troppo avanzato, quindi ho provato a leggere da un paio di altri libri: SCJP A comprehensive, The java programming language 4th edition.
È come se ci fossero cose che non aggiungono o hanno senso, non sono in grado di ottenere il perché e il come e di formare il modello corretto di comprensione concettuale. Mi scuso per aver descritto questo esercizio inutilmente. Ma qualcuno può consigliare buoni materiali di lettura e/o modi per imparare la concorrenza in Java.Non riesco a capire la concorrenza in java, ho provato a leggere dai libri consigliati

+1

Apprendi le nozioni di base sul threading simultaneo ('phtread' e' fork' in c) – alternative

risposta

7

, ma sono anche abbastanza nuovo per la programmazione java

Lasciare la libro di concorrenza a parte per alcuni mesi e andare avanti con la lettura di un libro e di un programma Java/SCJP di base molto di base per Java. Crea così ora e poi un Thread o Runnable secondo le istruzioni del libro. Giocaci intorno per alcuni mesi fino a quando non riesci a capire bene. Quindi continua con il libro di concorrenza.

Impara a camminare prima di correre, altrimenti stai strisciare invece di correre.

+1

Devo essere d'accordo con camminare prima di correre, ma una volta che hai letto i libri sulle basi di Java, il prossimo libro che leggi dovrebbe essere "Effective Java" di Josh Bloch. Dopotutto, se ancora non ci riesci, prova a creare code e esempi di lavoro semplici con la sincronizzazione. –

+1

"A pochi mesi" si dice onestamente anche molto ottimista. Ma se hai la motivazione ... – BalusC

+0

Core Java di Horstmann e Cornell è anche buono e ha copertura j.u.concurrent alla fine –

3

È un argomento difficile, nessuno lo ha mai compreso, nemmeno quelli che lo hanno progettato.

Molte persone ne comprendono solo un sottoinsieme. Se conosci solo alcuni trucchi/schemi che puoi usare con sicurezza nei tuoi programmi, è abbastanza buono. Da lì accumuli sempre di più.

Un principiante può solo sapere di poter aggiungere una parola chiave "sincronizzata" ai metodi. Sorprendentemente questo ha risolto molti problemi e si comporta bene, anche se non ha idea di cosa stia facendo.

7

Sembra che verrà presto testato (certificazione di classe?) "Sulla concorrenza Java". Non hai sperimentato il ciclo di incorrere in un problema in modo naturale, pensando a come risolverlo e passando alla concorrenza per una soluzione. Se questo è il caso ...

(1) Non incolpare il tuo cervello. Piuttosto, fai un passo indietro e inizia a pensare ai problemi che ti interessano. Prendi nota. Le applicazioni Internet sono un buon punto di partenza. Ad esempio: scrivere una sorta di server Internet in grado di gestire più connessioni da utenti diversi, come un server di gioco. Oppure, un programma di compravendita di azioni che deve gestire gli ordini del tuo robot contemporaneamente all'elaborazione delle informazioni dal broker.

(2) Pensa alla concorrenza. Ora che hai un problema che ti interessa, e pensi alla concorrenza semplicemente come multitasking, disegna un diagramma di attori/programmi con le frecce che rappresentano il modo in cui devono comunicare tra loro. Disegna un codice dummy-skeleton. In realtà non stai andando a scrivere un server di gioco; ma puoi creare una semplice libreria di classi scheletro con funzioni membro semplici e vuote come connectToGame(){}

(3) Ora sei pronto. Esegui un esempio di thread ciao-mondo o due.Sfoglia i tuoi libri o sfoglia i Javadoc e visualizza le diverse strutture concorrenti disponibili. Pensa a quali potresti applicare al tuo problema. Non preoccuparti di fare la "scelta giusta". Scoprirai presto se hai qualcosa che funziona.

(4) Embrace prova ed errore. C'è un'altra parola: apprendimento!

Ora, dopo aver acquisito un po 'di esperienza in questo modo, sarete in grado di raccogliere un libro di concorrenza Java e leggere il problema di qualcun altro.

Hang in là e non mollare.

1

Mi sembra di capire la concorrenza all'indietro e in avanti. Recentemente, ho preso un libro dallo scaffale nel nostro ufficio e ho trovato che era MOLTO buono. Non solo in concorrenza, offre una grande copertura di Java nel suo complesso.

Introduction to Java Programming, Eighth Edition: Comprehensive Version, Y. Daniel Liang

Tuttavia, la maggior parte della mia comprensione è venuto da esperienza di lavoro con il codice, affrontare i problemi, e cercando esempi. Non ho mai veramente capito il threading fino a quando non l'ho fatto.

La concorrenza è complessa e la maggior parte delle persone non riuscirà a leggerla. Guarda attraverso l'API e scrivi alcuni programmi di prova per provare le cose. Qualunque sia il libro che scegli, prova a non solo leggere il codice, scriverlo ed eseguirlo. Dopo un giorno o due, lavorando con esso, lo avrai per lo più capito.

2

Per aggiungere i miei due centesimi vale: concentrati sull'apprendimento dei concetti di concorrenza in primo luogo, piuttosto che sul meccanismo di utilizzo effettivo in qualsiasi lingua. Se ci si impantana nei costrutti linguistici, sarà molto più difficile ottenere una comprensione di alto livello dell'argomento.

A tal fine mi sento di raccomandare Come scrivere programmi paralleli da Carriero & Gelernter (gratuito & legale PDF download). Raggiunge un buon equilibrio tra la descrizione dei concetti e la fornitura di esempi concreti di codice e non si impantana in teoria. In realtà è molto leggibile e divertente (o forse potrebbe essere solo io).

Problemi correlati