Utas Java: Ulasan buku komparatif

Sejak edisi pertama Java Threads dari O'Reilly dan Concurrent Programming in Java dari Addison-Wesley dirilis beberapa tahun lalu, saya telah merekomendasikannya kepada orang-orang yang ingin belajar menggunakan thread. Dengan beberapa buku yang bersaing, dan edisi kedua dari buku asli, sekarang tersedia, saya telah memutuskan untuk menilai kembali rekomendasi saya. Pada artikel ini, saya akan melihat enam buku pemrograman utas Java terbaru.

Enam buku yang diulas adalah:

  1. Java Threads, Edisi Kedua, Scott Oaks dan Henry Wong (O'Reilly)
  2. Pemrograman Bersamaan di Java, Edisi Kedua, Doug Lea (Addison-Wesley)
  3. Menjinakkan Utas Java, Allen Holub (Apress)
  4. Pemrograman Thread Java, Paul Hyde (Sams)
  5. Pemrograman Multithreaded dengan Teknologi Java, Bil Lewis dan Daniel Berg (Prentice Hall, Sun Press)
  6. Komputasi Platform Java Kinerja Tinggi: Pemrograman Multithreaded dan Jaringan, Thomas Christopher dan George Thiruvathukal (Prentice Hall, Sun Press)

Tabel di bawah ini memberikan tinjauan singkat tentang karakteristik utama keenam buku tersebut.

Semua buku didasarkan pada rilis 1.2.x dari platform Java 2.
Ringkasan Buku Thread
  Thread Java Pemrograman Bersamaan Menjinakkan Java Threads Pemrograman Thread Java Pemrograman Multithreaded Java Kinerja Tinggi
Harga 2.95 9.95 4.95 4.99 9.99 9.99
Total Halaman 320 410 300 510 460 410
CD-ROM / Sumber dari Web Tidak iya Tidak iya Tidak iya Tidak iya Tidak iya Tidak iya
Dasar-dasar Thread Luar biasa Adil Tidak ada Luar biasa Luar biasa Adil
Teknik Baik sekali Baik Baik sekali Luar biasa Baik Baik sekali
Pola desain Tidak ada Luar biasa Miskin Tidak ada Tidak ada Baik
Skala: Tidak Ada, Buruk, Sedang, Baik, Sangat Baik, Luar Biasa

Tabel harus cukup jelas hingga atribut CD-ROM. Izinkan saya menjelaskan lebih lanjut beberapa baris terakhir:

  • Atribut Dasar Thread menunjukkan sejauh mana buku-buku menggambarkan apa benang dan bagaimana menggunakannya: menggambarkan Threadkelas dan Runnableantarmuka, Objectmetode wait(), notify()dan notifyAll(), dan synchronizedkata kunci.
  • Atribut Techniques mengevaluasi seberapa baik buku mengeksplorasi teknik dalam menggunakan utas.
  • Atribut Design Patterns mengukur penjelasan buku tentang cara membuat pemrograman berbasis thread mengikuti pola desain yang ditentukan dengan baik.

Selanjutnya, saya akan mengulas setiap buku. Di samping setiap judul buku terdapat peringkat bintang, berdasarkan area cakupan utas yang diklaim sebagai fokus buku tersebut, bukan hanya rata-rata dari tiga atribut yang tercantum di atas. Satu bintang menunjukkan pekerjaan yang buruk; peringkat tertinggi (lima bintang) menunjukkan cakupan yang luar biasa.

Thread Java

Edisi pertama Java Threads, oleh Scott Oaks dan Henry Wong, adalah sumber daya definitif asli untuk belajar memprogram dengan utas. Sementara sebagian besar buku pengantar membahas apa itu utas dan bagaimana menggunakan Threadkelas dengan Runnableantarmuka, Java Threads memberikan informasi tambahan yang diperlukan untuk menggunakannya secara efektif. Edisi kedua mengikuti jejaknya: ini mencakup informasi terbaru tentang penggunaan thread dengan platform Java 2, informasi tentang API yang tidak digunakan lagi, interupsi I / O, dan perubahan keamanan Java 2. Buku ini juga membahas masalah multithreading dengan set komponen Swing, dan memberikan bantuan dengan dukungan penjadwalan asli dan bekerja dengan mesin multiprosesor.

Jika Anda baru mengenal pemrograman Java dan belum menguasai thread, Java Threads adalah sumber yang bagus. Anda akan melihat dasar-dasar penguliran Java, dan mempelajari teknik yang diperlukan agar program Anda berfungsi dengan baik di dunia multithread.

Pemrograman Bersamaan di Java

Sementara Java Threads menjelaskan detail tingkat rendah penggunaan Threads API, Concurrent Programming in Java, oleh Doug Lea, mengeksplorasi desain yang tepat dari program multithread. Mengetahui bagaimana menggunakan API tidak cukup di dunia Java; Anda juga harus meluangkan waktu dan energi untuk mendapatkan desain program yang benar. Dalam hal ini, Concurrent Programming adalah buku pola desain. Dengan adanya masalah tertentu, Anda dapat mencari pola yang ditentukan dalam buku, dan program Anda secara praktis menulis sendiri.

Pemrograman Bersamaan dibagi menjadi empat area yang menggambarkan pola penggunaan yang berbeda. Bagian "Pemrograman Berorientasi Objek Secara Bersamaan" memulai dengan dasar-dasarnya. Bagian "Pengecualian" menjelaskan pola penggunaan synchronizedkata kunci. "Negara Ketergantungan" mengeksplorasi masalah dengan dan pola menggunakan wait(), notify()dan notifyAll()metode dari Objectkelas. Bagian terakhir, "Membuat Untaian," adalah tentang pola untuk menggunakan Threadkelas.

Buku ini pasti melayani pengguna mahir, dan bukan untuk menjadi lemah hati. Anda diharapkan memiliki pemahaman yang baik tentang pemrograman berorientasi objek dan bahasa pemrograman Java, dan hanya kurang dalam bidang perancangan program untuk masalah konkurensi. Selain buku tersebut, Lea membuat perpustakaan util.concurrent tersedia secara gratis di Situs Web buku. (Lihat Sumber untuk link.) Perpustakaan akan membantu Anda merancang dan mengembangkan program multithread.

Menjinakkan Java Threads

Taming Java Threads dari Allen Holub , berasal dari JavaWorld sebagai seri Java Toolbox sembilan bagian. Artikel-artikel tersebut telah diperbarui dan sekarang menjadi isi buku, bersama dengan bab baru yang menarik yang menjelaskan masalah dengan API penguliran Java. (Lihat Resources untuk link ke bagian itu, berjudul "If I Were King.") Taming tidak seperti dua buku pertama yang saya ulas; ini hanya tentang teknik untuk menggunakan API dengan benar. Ini bukan pengantar utas atau buku pola desain. Pustaka kode (lihat Sumber untuk tautan) juga tersedia sehingga Anda dapat memanfaatkan apa yang telah Anda pelajari. Pastikan untuk membaca perjanjian lisensi; itu bukan domain publik atau open source.

Setelah menjelaskan arsitektur dasar model multithreading Java, Holub menjelaskan bahaya penggunaan utas dan teknik untuk menggunakannya dengan aman. Anda akan belajar membuat dan menggunakan mutex, semaphore, dan variabel bersyarat. Anda akan terbiasa dengan perbedaan antara metode invokeLater()dan invokeAndWait()metode Swing . Holub juga menjelajahi AWTEventMulticasterkelas dan menunjukkan bagaimana kelas ini aman untuk thread dengan overhead minimal, dan bagaimana Anda dapat bekerja dengan kumpulan thread. Setelah semua dikatakan dan dilakukan, Anda akan memiliki pemahaman yang luar biasa tentang batasan dan penggunaan model threading Java.

Saya terkejut melihat beberapa kesalahan teknis dalam buku ini - tidak kurang dalam pengantar - tetapi itu tidak mengurangi informasi luar biasa yang ditawarkan buku itu. Namun, setelah terus-menerus melihat kode Java yang diformat dengan kasus campuran, saya sedikit terkejut bahwa kode Holub diformat dengan karakter garis bawah antara kata-kata dalam variabel dan nama metode. Anda mungkin perlu membaca blok kode beberapa kali sebelum Anda memahaminya sepenuhnya, tetapi kualitas informasi yang diberikan di sini sebanding dengan ketidaknyamanannya. Satu catatan terakhir: semua kode sumber sepenuhnya dikomentari javadoc.

Pemrograman Thread Java

Pemrograman Thread Java, oleh Paul Hyde, secara langsung bersaing dengan Java Threads. Ini dengan jelas menargetkan pengembang pemula, dan mencakup liputan tambahan tentang topik dan teknik yang lebih maju saat pengembang itu "tumbuh". Buku ini adalah yang terbesar, dan ruangnya dimanfaatkan dengan baik.

Paruh pertama Java Thread Programming menjelaskan apa itu thread dan bagaimana bekerja dengan dasar-dasarnya. Anda mendapatkan deskripsi umum tentang cara membuat utas dan menggunakan Runnableantarmuka. Ada bab tentang cara menghentikan utas, termasuk cara menangguhkan dan melanjutkannya tanpa menggunakan metode yang sudah usang - teknik yang bagus untuk meningkatkan produktivitas. Selain mencakup wait()dan notify(), Hyde menjelaskan secara rinci volatilekata kunci dan komunikasi interthread melalui pipa I / O. Pemrograman Thread Java juga memiliki cakupan terbaik dari kelas ThreadLocaldan InheritableThreadLocal, selain cakupan utas dan Swing yang biasa ditemukan di buku lain.

Bagian 2 dari Java Thread Programming menjelaskan teknik untuk bekerja dengan thread Java. Ini menawarkan cakupan thread-pooling terbaik dan bab yang bagus untuk keluar dari I / O yang diblokir. Anda tidak akan kecewa dengan pilihan ini.

Pemrograman Multithreaded dengan Teknologi Java

Sepertinya saya selalu menemukan setidaknya satu buku yang tidak sama dengan yang lain - Pemrograman Multithreaded dengan Teknologi Java, oleh Bil Lewis dan Daniel Berg, sungguh luar biasa. Saya masih memberinya peringkat bintang, tetapi buku ini patut disebutkan secara khusus. Menurut pendapat saya, Pemrograman Multithreaded 'Tujuan utamanya bukan untuk mengajari Anda memprogram dengan utas di Java. Ini akan membantu Anda di area itu, tetapi tujuan utamanya tampaknya untuk mengajari Anda cara kerja arsitektur utas yang mendasarinya, baik di dalam Java Virtual Machine (Java VM) dan sistem operasi yang mendasarinya. Nyatanya, Anda tidak hanya mendapatkan banyak contoh kode buku dalam kode Java, Anda juga mendapatkan kode POSIX dan kode untuk penanganan utas Win32 API. Jika ada latihan pembaca di akhir setiap bab, ini akan bekerja dengan baik sebagai teks perguruan tinggi.

Yang mengatakan, seberapa baik Pemrograman Multithread mengajari Anda cara menggunakan utas? Ini paling mirip dengan Java Threads ; tujuan utamanya adalah untuk mengajari Anda apa itu utas dan cara menggunakannya. Ini juga menunjukkan bagaimana segala sesuatu di bawah tenda bekerja di Java VM, bagaimana semuanya dijadwalkan dalam Java VM, dan seterusnya. Selain itu, Anda mendapatkan liputan topik threading tipikal seperti sinkronisasi, kebuntuan, dan kondisi balapan. Lewis dan Berg bahkan membahas masalah utas dengan RMI dan teknik pengoptimalan untuk meningkatkan kinerja. Secara keseluruhan, ini adalah buku yang bagus - hanya saja bukan presentasi Anda tentang utas Java.

Sejauh contoh buku itu, hati-hati terhadap Elvis yang tertangkap oleh UFO.

Komputasi Platform Java Berkinerja Tinggi

Mengecek judul terpanjang adalah High Performance Java Platform Computing: Multithreaded and Networked Programming, oleh Thomas Christopher dan George Thiruvathukal. Bahkan nama belakang pengarang setidaknya dua kali lipat panjang kompetisi mereka! Kelebihan tidak berhenti di situ; buku ini juga lebih mahal 25 persen dari yang lain.

Cukup tentang bagian luar - apa yang ada di dalamnya? Performa Tinggi melompat langsung ke diskusi tentang komputasi paralel. Anda akan belajar tentang Mesin von Neumann, Taksonomi Flynn, percepatan linier, dan Hukum Amdahl, semuanya ada di Bab 1. Bab 2 mengeksplorasi pembuatan thread secara lebih mendalam daripada kebanyakan pengantar API. Setelah peragaan kondisi balapan, Bab 3 membahas sinkronisasi dan mengapa Anda membutuhkannya. Bab 4 mendalami monitor, dengan banyak variasi pada masalah kunci pembaca-penulis. Di Bab 5, penulis membahas penggunaan memori bersama - di heap, bukan variasi sistem Unix - semuanya untuk tujuan memiliki kumpulan thread. Sisa dari buku ini mencakup pola untuk mengembangkan aplikasi untuk eksekusi paralel.

Ada banyak informasi bagus di sini tentang komputasi paralel, tetapi tujuan Kinerja Tinggi bukanlah untuk mengajarkan pemrograman utas tujuan umum. Tampaknya dikembangkan terutama sebagai teks untuk kursus komputasi paralel - setiap bab diakhiri dengan serangkaian latihan yang bijaksana, yang saya gagal menemukan jawabannya.

Apakah saya tetap merekomendasikan hal yang sama?

Edisi pertama Concurrent Programming in Java dan Java Threads keluar pada tahun 1997 dan sangat direkomendasikan. Apakah saya hanya secara membabi buta merekomendasikan edisi kedua mereka? Singkatnya, tampaknya Lea's Concurrent Programming masih merupakan sumber yang sangat baik bagi mereka yang belajar merancang program untuk dunia multithread. Ini bukan bacaan yang mudah, tetapi pola dan teknik desain yang dijelaskan dalam buku ini adalah alat yang sangat baik untuk pengembang Java yang serius.

Di sisi lain, tampaknya Java Threads telah digantikan oleh Java Thread Programming oleh Sams sebagai buku terbaik untuk pemula. Tidak ada yang salah secara teknis dengan penawaran O'Reilly, tetapi Pemrograman Thread Java bekerja lebih baik sebagai pengantar thread Java. Hyde bahkan melampaui materi pengantar, menawarkan teknik yang lebih canggih sebagai tambahan.

Jika Anda memiliki edisi pertama Java Threads dan Concurrent Programming di Java, apakah pembaruannya layak? Saya mungkin merekomendasikan untuk mendapatkan edisi kedua Lea dan meneruskan Java Threads. Jika Anda memiliki Java Threads edisi pertama , Anda mungkin sudah tidak membutuhkan yang kedua sekarang. Jika Anda masih membutuhkan teks pengantar, pilih Java Thread Programming milik Sams .

Apa yang harus dilakukan dengan sisanya? Ini benar-benar panggilan yang sulit dan tergantung uang siapa yang Anda belanjakan. Jika saya hanya bisa mendapatkan satu buku utas lagi, saya akan memilih Pemrograman Multithreaded dengan Teknologi Java. Cakupan utasnya unik dan cukup berguna untuk menjadikannya tambahan yang bagus untuk perpustakaan. Holub's Taming Java Threads berisi beberapa teknik bagus untuk mendapatkan hasil maksimal dari pemrograman thread. Saya tidak yakin apakah itu sumber daya yang diperlukan. High Performance Java Platform Computing sepertinya cocok untuk mereka yang tertarik dengan dunia komputasi paralel. Jika tidak, saya akan meninggalkannya di rak.

John Zukowski adalah konsultan Java independen, penulis Panduan Definitif untuk Berayun untuk Java 2, Edisi Kedua dari Apress, Menguasai Java 2 dari Sybex, dan Referensi Java AWT dari O'Reilly, serta panduan Tentang Fokus pada Java.