Apakah buku “Java Concurrency in Practice” relevan di zaman Java 8 dan 11?

Halo rekan!

Artikel tersebut, terjemahan yang kami tawarkan hari ini, sekali lagi mengingatkan pentingnya buku awet muda " Java Concurrency in practice " oleh Brian Goetz.


Tanggal komentar pada artikel ini di aslinya menunjukkan bahwa penulis tidak memperbarui dan menerbitkannya kembali untuk pertama kalinya. Oleh karena itu, kami juga mengizinkan diri untuk memperbarui tautan ke buku yang disebutkan dalam artikel oleh Raul-Gabriel Urm, Mario Fusco dan Alan Mycroft, yang diterbitkan oleh Manning dengan judul Java 8 in Action. Kami sedang mempersiapkan terjemahan dari edisi baru yang disebut Java Modern. Tetapi untuk sekarang, mari kita bicara tentang klasik. Anda diundang ke kucing.


Seorang pembaca dengan julukan Shobhit menanyakan pertanyaan ini dalam komentar di sebuah artikel tentang 12 buku Java tingkat lanjut untuk programmer tingkat menengah - bagian 1 . Pertanyaannya sangat bagus, dan saya pikir banyak programmer Java memiliki keraguan yang sama ketika di zaman kita seseorang merekomendasikan agar mereka membaca Java Concurrency in Practice . Ketika buku ini pertama kali diterbitkan, pada tahun 2006, seluruh dunia Jawa masih belum dapat menemukan inovasi di bidang persaingan yang dibuat di Jawa 1.5. Saya pikir kemudian upaya serius pertama dibuat untuk meningkatkan dukungan bawaan Java untuk multithreading dan daya saing. Kemudian banyak programmer bahkan tidak curiga tentang alat baru yang muncul di API, misalnya, tentang CountDownLatch , CyclicBarrier , ConcurrentHashMap , dan banyak lainnya. Buku ini berfungsi sebagai pengantar untuk bekerja dengan alat-alat ini, dan mengatakan bagaimana menggunakannya untuk menulis aplikasi Java yang kompetitif dan berkinerja tinggi.

Ini persis ide umum buku ini, dan dalam nada ini banyak pengembang akan menggambarkannya kepada Anda jika Anda bertanya "Bagaimana Anda suka" Java Concurrency in Practice ""? Namun, saya mengambil buku ini sedikit berbeda, dan itulah sebabnya saya masih merekomendasikannya untuk semua pendatang baru yang akrab dengan Java, atau pengembang tingkat menengah yang ingin mempelajari konsep-konsep yang berkaitan dengan persaingan.

Materi terpenting yang akan diperkenalkan buku ini kepada Anda adalah konsep dan dasar-dasar pemrograman kompetitif yang jelas, khususnya, visibilitas, pemesanan, keamanan utas , kekekalan , konkurensi, dll.

Dia juga menjelaskan mengapa, dalam kebanyakan kasus, aplikasi Java yang kompetitif dieja salah, mengapa programmer Java membuat kesalahan umum yang menyebabkan masalah multithreading, termasuk kondisi balapan, kebuntuan, kunci aktif, gangguan memori, dan hanya perhitungan yang salah.

Buku ini menggunakan emotikon yang menyertai deskripsi "bagaimana melakukan kesalahan", sebelum memperkenalkan pembaca dengan solusi yang benar dan berkualitas tinggi untuk masalah tersebut. Jadi buku ini tidak hanya membantu mengatasi kesalahpahaman yang dimiliki oleh banyak pengembang Java, tetapi juga untuk menanamkan dalam komunitas Java informasi yang tepat tentang cara bekerja dengan multithreading dan kompetisi.

Tidak ada keraguan bahwa multithreading dan kompetisi itu kompleks. Mereka tidak mudah diimplementasikan dengan benar dalam kode, sama sulitnya untuk dipahami dan dijelaskan. Saya tahu banyak programmer yang tidak bisa menggambarkan secara visual bagaimana thread berbeda berinteraksi dengan elemen kode yang sama, beroperasi dengan data yang berbeda.

Seperti contoh rekursi klasik, multithreading sangat mudah bagi beberapa programmer untuk berlatih, sementara bagi yang lain, multithreading sulit untuk dipahami dan diterapkan dalam skenario aplikasi.

Kontribusi terbesar dari buku Java Concurrency in Practice untuk pengembangan dunia Jawa bukanlah untuk menyederhanakan persaingan, tetapi untuk memberikan informasi yang benar dan akurat tentang hal itu yang kurang. Sejak itu, saya telah melakukan banyak wawancara dan saya tahu bahwa pemrogram selalu tidak cukup akurat membayangkan perangkat aliran dan cara kerjanya.

Banyak programmer yang bahkan berhasil bekerja dengan Java selama 4-5 tahun tidak mengerti bagaimana variabel volatile diatur ; yang mereka tahu adalah bahwa ketika bekerja dengan variabel yang bisa berubah, Anda perlu memeriksa setiap perbandingan berapa nilainya di memori utama. Ini benar, tetapi hanya sebagian dari kebenaran.

Mereka tidak diberitahu tentang model memori Java, tentang bagaimana variabel variabel dapat mempengaruhi urutan kode dan pelaksanaan instruksi komputasi pada intinya. Ini tentang menggunakan kompilasi dinamis ( JIT ) dan Java Virtual Machine ( JVM ) untuk optimisasi; optimasi tersebut dapat menyebabkan kesalahan logis yang halus.

Orang tidak diberi tahu bagaimana variabel yang dapat diubah memungkinkan Anda untuk melihat apa yang dilakukan dalam satu utas sebelum mengakses variabel dari utas lainnya, dll. Tidak semua orang tahu apa itu penghalang memori dan bagaimana hal itu memengaruhi visibilitas.

Dari buku Java Concurrency in Practice, banyak programmer Java telah mempelajari semua konsep ini. Saya harus mengakui bahwa saya sendiri, sampai saya membacanya, dalam banyak hal keliru tentang banyak masalah multithreading dan kompetisi, khususnya, urutan, visibilitas dan efek implisit dari variabel akhir dan publikasi yang aman. Buku itu membantu saya memahami hal ini.

Ngomong-ngomong, jika beberapa bagian dari buku ini tampaknya sedikit tidak bisa dipahami oleh Anda - percayalah, bukan untuk Anda sendiri. Di sini kami berterima kasih kepada Dr. Heinz Kabutz, yang menjabarkan materi buku ini dalam bentuk yang disederhanakan dalam kursus Java Concurrency in Practice Bundle-nya .



Bahkan jika bahan ini tampaknya terlalu rumit untuk Anda, Heinz memiliki kursus lain, Menguasai Thread , yang membantu untuk memahami multithreading untuk setiap programmer Java rata-rata.

Sekarang mari kita bicara tentang Java 8, yaitu, apa yang telah berubah dari Java 1.5 ke Java 8. Banyak alat baru telah muncul di JDK untuk memperkenalkan daya saing dan merancang aplikasi Java yang lebih kompetitif. Garpu-gabung pool telah muncul di JDK 7, dan CompleteableFutures di Java 8. Jauh lebih penting bahwa, dimulai dengan Java 8, gaya pemrograman baru yang lebih fungsional, yang dilengkapi dengan ekspresi lambda , telah diperbaiki.

Kami juga memiliki aliran dan aliran paralel, yang memungkinkan pengembang untuk mengambil keuntungan dari daya saing tanpa memprogramnya. Seluruh gagasan untuk mengambil implementasi kompetisi dari pengembang aplikasi dan mendelegasikannya kepada pengembang API sedikit menyederhanakan situasi dengan kompetisi di Jawa dan mengurangi risiko penerapannya.

Ini juga berarti bahwa di Jawa Anda dapat melakukan operasi massal di beberapa utas menggunakan hanya beberapa metode, tanpa menulis satu baris kode terkait dengan utas, kata kunci yang disinkronkan, atau menunggu dan memberi tahu metode.

Tidak diragukan lagi, setiap pengembang Java perlu mempelajari alat-alat baru ini untuk mengikuti perkembangan teknologi - yang, tentu saja, akan membantu buku seperti Modern Java In Action . Ini tidak hanya akan memperkenalkan Anda ke semua inovasi bahasa Jawa, tetapi juga membantu Anda belajar bagaimana menggunakannya dalam tugas sehari-hari, memahami motivasi untuk inovasi ini dan mendapatkan gambaran umum tentang bahasa Jawa modern.



Meskipun buku Java Concurrency in Practice dalam bentuknya saat ini tidak mencakup semua konsep dan alat penting ini, buku ini tetap tak ternilai untuk mengeksplorasi fitur-fitur utama dari bahasa Jawa yang terkait dengan utas , persaingan, dan multithreading .

Buku Götz masih harus dibaca untuk setiap pengembang Java yang ingin belajar dan menguasai multithreading dan berdaya saing - kekuatan terbesar Java dalam pengembangan aplikasi.

Berdasarkan hal tersebut di atas, saya, seperti banyak pengembang Java di seluruh dunia, ingin melihat edisi terbaru Java Concurrency in Practice, yang akan mempertimbangkan alat dan metodologi yang muncul di Java 6, 7, 8, 9, 10 dan mungkin bahkan di Jawa 11. Setelah semua, versi terbaru dari pola desain Java dan Kepala Efektif telah muncul , mencakup Java 8 dan menunjukkan betapa lebih mudah untuk menerapkan berbagai pola menggunakan fitur baru Java 8.

Source: https://habr.com/ru/post/id451322/


All Articles