Arti kerja keras adalah di masa yang akan datang, kamu hanya akan melihat orang dan hal yang kamu sukai!
Masalah dan permintaan Tarik dipersilakan. Semua dokumen diberi kode sendiri. Jika menurut Anda bagus, Anda dapat memberi bintang pada dokumen tersebut untuk memberi semangat dan dukungan :)
Seluruh rangkaian artikel tentang konkurensi Java Pertama, ini adalah minat saya sendiri. Kedua, bagian ini sangat sulit dipahami dalam praktiknya, dan sering ditanyakan saat proses wawancara. Oleh karena itu, selama proses pembelajaran, saya mencatat pengetahuan dasar terkait konkurensi Java. Pertama, saya dapat membangun sistem untuk pengetahuan saya, dan saya juga berharap dapat bermanfaat bagi orang lain.
Tentang topik konkurensi Java:
(1) Berisi pengetahuan dasar tentang konkurensi, dan setiap judul tertaut ke artikel tertentu;
(2) Berisi pertanyaan wawancara untuk perekrutan musim gugur. Memahaminya akan membantu Anda mendapatkan sesuatu (dan saya harap semua orang dapat menemukan pekerjaan favorit Anda :))
(3) Selama proses membaca, jika bermanfaat tolong beri saya acungan jempol, yang menjadi penyemangat atas kegigihan saya dalam coding.
Catatan: Harap sebutkan sumber aslinya saat mencetak ulang, terima kasih!
pengetahuan dasar
1.1 Keuntungan dan kerugian dari pemrograman bersamaan
Poin pengetahuan: (1) Mengapa menggunakan konkurensi? (Keuntungan); (2) Kerugian dari pemrograman bersamaan; (3) Konsep yang membingungkan
1.2 Status thread dan operasi dasar
Poin pengetahuan: (1) Cara membuat thread baru; (2) Konversi status thread; (3) Operasi dasar thread;
Teori Konkurensi (JMM)
Model memori Java dan aturan terjadi sebelum
Poin pengetahuan: (1) struktur memori JMM; (2) Penataan ulang; (3) terjadi sebelum aturan
Kata kunci konkurensi
3.1 Biarkan Anda memahami sepenuhnya Disinkronkan
Poin pengetahuan: (1) Cara menggunakan sinkronisasi; (2) mekanisme monitor; (3) hubungan terjadi-sebelum yang disinkronkan; (4) semantik memori yang disinkronkan; (5) optimasi kunci;
3.2 Biarkan Anda memahami sepenuhnya volatil
Poin pengetahuan: (1) Prinsip implementasi; (2) Derivasi hubungan terjadi-sebelum; (3) Semantik memori; (4) Implementasi semantik memori
3.3 Apakah Anda benar-benar memahami final?
Poin pengetahuan: (1) Cara menggunakan; (2) aturan penataan ulang akhir; (3) prinsip implementasi akhir; (4) referensi akhir tidak dapat "meluap" dari konstruktor (pelarian ini)
3.4 Ringkasan tiga sifat utama: atomisitas, keteraturan, dan visibilitas
Poin pengetahuan: (1) Atomisitas: tersinkronisasi; (2) Visibilitas: tersinkronisasi, mudah berubah; (3) Keteraturan: tersinkronisasi, mudah berubah
Sistem kunci
4.1 Pengenalan pertama pada Lock dan abstractQueuedSynchronizer (AQS)
Poin pengetahuan: (1) Perbandingan antara Kunci dan tersinkronisasi; (2) Maksud desain AQS; (3) Cara menggunakan AQS untuk mengimplementasikan komponen sinkronisasi khusus; (4) Metode yang dapat diganti;
4.2 Pemahaman mendalam tentang AbstrakQueuedSynchronizer (AQS)
Poin pengetahuan: (1) Struktur data antrian sinkronisasi AQS; (2) Kunci eksklusif; (3) Kunci bersama;
4.3 Pahami kembali ReentrantLock
Poin pengetahuan: (1) Prinsip penerapan reentrant lock; (2) Prinsip penerapan fair lock; (3) Prinsip penerapan fair lock; (4) Perbandingan antara fair lock dan fair lock
4.4 Pemahaman mendalam tentang kunci baca-tulis ReentrantReadWriteLock
Poin pengetahuan: (1) Cara merepresentasikan status baca dan tulis; (2) Akuisisi dan pelepasan WriteLock; (3) Akuisisi dan pelepasan ReadLock; (4) Strategi degradasi kunci; Skenario aplikasi
4.5 Penjelasan rinci tentang mekanisme tunggu/pemberitahuan Kondisi dan sinyal tunggu
Poin pengetahuan: (1) Karakteristik dibandingkan dengan mekanisme menunggu/memberitahukan Objek; (2) Metode yang sesuai dengan menunggu/memberitahukan Objek; (3) Struktur data yang mendasari; (4) Prinsip implementasi menunggu; 6) Kombinasi menunggu dan signal/signalAll;
4.6 Alat Dukungan Kunci
Poin pengetahuan: (1) Fungsi utama; (2) Karakteristik dibandingkan dengan pemblokiran yang disinkronkan;
wadah bersamaan
5.1 Kontainer serentak ConcurrentHashMap (JDK versi 1.8)
Poin pengetahuan: (1) atribut utama; (2) kelas internal yang penting; (3) operasi CAS yang terlibat; (4) metode konstruksi; (5) proses eksekusi; 8) Proses eksekusi metode penghitungan ukuran; (9) Perbandingan antara ConcurrentHashMap versi 1.8 dengan versi sebelumnya
5.2 CopyOnWriteArrayList dari wadah bersamaan
Poin pengetahuan: (1) Prinsip implementasi; (2) Perbedaan antara KK dan ReentrantReadWriteLock; (3) Skenario penerapan; (4) Mengapa konsistensinya lemah;
5.3 ConcurrentLinkedQueue dari container bersamaan
Poin pengetahuan: (1) Prinsip implementasi; (2) Struktur data; (3) Metode inti; (4) Tujuan desain pembaruan HOPS
5.4 ThreadLokal wadah bersamaan
Poin pengetahuan: (1) Prinsip implementasi; (2) Prinsip set metode; (3) Prinsip metode dapatkan; (4) Prinsip metode penghapusan;
Artikel yang menjelaskan masalah kebocoran memori ThreadLocal secara mendalam dari kode sumber.
Poin pengetahuan: (1) Prinsip kebocoran memori ThreadLocal; (2) Praktik terbaik ThreadLocal; (3) Skenario aplikasi
5.5 BlockingQueue dari container bersamaan
Poin pengetahuan: (1) Operasi dasar BlockingQueue; (2) BlockingQueue yang umum digunakan;
Penjelasan mendetail tentang prinsip implementasi ArrayBlockingQueue dan LinkedBlockingQueue dalam container bersamaan
Kumpulan thread (sistem eksekutor)
6.1 Prinsip implementasi kumpulan thread
Poin pengetahuan: (1) Mengapa menggunakan kumpulan thread? (2) Proses eksekusi; (3) Arti dari setiap parameter konstruktor; (4) Cara menutup kumpulan thread; (5) Cara mengkonfigurasi kumpulan thread;
6.2 ScheduledThreadPoolExecutor dari kumpulan thread
Poin pengetahuan: (1) Struktur kelas; (2) Metode umum; (3) Tugas Masa Depan Terjadwal; (3) Antrian Pekerjaan Tertunda;
6.3 Ringkasan operasi dasar FutureTask
Poin pengetahuan: (1) Beberapa status FutureTask; (2) metode dapatkan; (3) metode pembatalan; (4) skenario aplikasi; (5) mengimplementasikan antarmuka Runnable
Kelas operasi atom
7.1 Ringkasan kelas operasi atom dalam paket atom di Java
Poin pengetahuan: (1) Prinsip implementasi; (2) Tipe dasar pembaruan atom; (3) Tipe array pembaruan atom; (4) Tipe referensi pembaruan atom;
Alat konkurensi
8.1 Dalam bahasa Inggris sederhana, kelas alat konkurensi Java-CountDownLatch, CyclicBarrier
Poin pengetahuan: (1) CountDownLatch; (2) CyclicBarrier; (3) Perbandingan antara CountDownLatch dan CyclicBarrier
8.2 Kelas alat konkurensi Java dalam bahasa sehari-hari - Semaphore, Exchanger
Poin pengetahuan: (1) Semafor kontrol akses sumber daya; (2) Penukar pertukaran data
Praktek konkurensi
9.1 Sebuah artikel yang memungkinkan Anda memahami secara menyeluruh masalah produsen-konsumen
Grafik Pengetahuan Konkurensi JAVA
Anda dapat berpindah ke jendela baru untuk memperbesar agar dapat melihat lebih baik atau melihat gambar aslinya.
Tautan ke gambar asli grafik pengetahuan. Jika berguna, Anda dapat mengkloningnya untuk digunakan sendiri.