👏 Preuzmi → Concurrent Programming in Java (plain-language) PDF
Za Java programera, sposobnost da ovlada konkurentnim programiranjem jedan je od važnih kriterijuma za procenu toga da li je istaknut. Pošto je konkurentno programiranje najteže razumljiva oblast u Javi, ono obuhvata operativne sisteme, memoriju, CPU, programske jezike i druga osnovna znanja, pa bolje iskušava programerove osnove.
Naročito sa dolaskom ere velikih podataka, visoka konkurentnost je postala svakodnevica. Na poslu nikako ne možeš zaobići zadatke konkurentnog programiranja — na primer, želiš da napišeš program koji s jedne strane čita podatke iz datoteke, a s druge radi proračune u realnom vremenu... Zato, da bi postao senior Java backend inženjer i ušao u veliku tehnološku kompaniju, moraš čvrsto ovladati konkurentnim programiranjem.
1. Savladaj osnovne koncepte
Prvi korak u učenju Java konkurentnog programiranja jeste da izgradiš čvrste osnove i potpuno razumeš sve relevantne osnovne koncepte. Na primer, duboko razumevanje Java memorijskog modela, uzroka i rešenja mrtvih blokada (deadlock), mehanizama saradnje između niti i slično.

2. Savladaj uobičajene klase za konkurentnost
Kada razjasniš ključne probleme konkurentnog programiranja, pri povratku na Java SDK paket za konkurentnost osetićeš naglo prosvetljenje: to su samo alati razvijeni za rešavanje problema konkurentnosti. Tada ti SDK paket za konkurentnost postaje potpuno dostupan za proučavanje.

3. Pregledna mapa konkurentnog programiranja
Najveća greška u učenju jeste „slepi ljudi opipavaju slona" — vidi se samo deo, a ne celina. Zato treba da „iskočiš" iz pojedinačnih znanja i tehnika i sagledaš konkurentno programiranje odozgo. Naravno, prvi zadatak jeste da izgradiš preglednu mapu.
Na osnovu mog višegodišnjeg iskustva, oblast konkurentnog programiranja može se apstrahovati u tri ključna problema: podela rada, sinhronizacija i međusobno isključivanje. U nastavku je „pregledna mapa konkurentnog programiranja" koju sam napravio na osnovu ta tri ključna problema, a koja može tvoje znanje da sistematizuje i poveže — od tačaka preko linija do površina.

Ali samo iskakanje nije dovoljno; potreban je i sledeći korak — zaroniti u određeni problem, duboko ga razumeti i pronaći suštinu. Na primer, kada vidim uslovnu promenljivu Condition u Java SDK-u, podsvesno zapitam: „Odakle potiče? Da li je specifičan Java koncept ili opšti koncept programiranja?" Kada saznam da potiče od monitora, ponovo zapitam: „Koja je pozadina i problem koje monitori rešavaju?" Tako istražujući, otkrio sam da konkurentne tehnologije u Javi uglavnom imaju teorijske osnove, i da te iste teorije imaju slične implementacije u drugim programskim jezicima.
4. Concurrent Programming in Java (plain-language)
U učenju Java konkurentnog programiranja jedna se knjiga ne može zaobići, a to je „Java Concurrency in Practice", ali ta se knjiga pri čitanju često čini previše naprednom. Šta onda?
Nekoliko iskusnih stručnjaka iz Alibaba-e potajno je napisalo „Concurrent Programming in Java (plain-language)" i otvorilo je na GitHub-u.
Da ti najpre predstavim autore.

Impresivno, zar ne — sve sami vrhunski stručnjaci, pa se i njihovo delo može s punim poverenjem preporučiti. Pokazaću ti i okviran sadržaj — već sama oblast Java memorijskog modela obrađena je vrlo temeljito.

Pored ove knjige, kod mene se nalazi i niz drugih elektronskih knjiga o Java konkurentnom programiranju.

