Implementasi Java Concurrent Programming Bounded Cache
1. Kelas dasar cache terikat
Paket cn.xf.cp.ch14;/** * Fungsi: cache terikat mengimplementasikan kelas dasar * Waktu: 2:20:00 PM * File: BaseBoundedBuffer.java * @Administrator Penulis * * @param <v> */kelas publik BaseBoundedBuffer <v> {private final v [] buf; ekor int pribadi; kepala int pribadi; Hitungan int pribadi; Public BaseboundedBuffer (Int Capasity) {// menginisialisasi array this.buf = (v []) objek baru [kapasitas]; } // Masukkan data, metode akhir tidak dapat ditulis ulang dilindungi final void doput (v v) {buf [tail] = v; if (++ tail == buf.length) {tail = 0; } // Masukkan metode, jumlah total ++ ++ count; } / *** Keluarkan data* @return* / Dotake final yang disinkronkan () {v v = buf [head]; buf [head] = null; if (++ head == buf.length) {head = 0; } --menghitung; mengembalikan v; } // Dengan menilai hitungan, tentukan apakah arraynya penuh dengan public final boolean isfull () {return count == buf.length; } public final boolean iSempty () {return count == 0; }}2. Tentukan prasyarat sebelum melakukan operasi
Paket cn.xf.cp.ch14;/*** Fungsi: Periksa insersi dan dapatkan operasi elemen terlebih dahulu, dan kemudian lakukan operasi. The verification does not pass and will not be allowed to operate * Time: 2:33:41 pm * File: GrumpyBoundedBuffer.java *@author Administrator * * @param <V> */public class GrumpyBoundedBuffer<V> extends BaseBoundedBuffer<V>{ public GrumpyBoundedBuffer(int size) { super(size); } public disinkronkan void put (v v) melempar pengecualian {// jika itu antrian penuh, elemen baru tidak dapat dimasukkan jika (this.isfull ()) {lempar pengecualian baru ("Qule melebihi"); } this.doput (v); } // Demikian pula, jika antriannya kosong, elemen baru tidak dapat diambil publik yang disinkronkan V mengambil () melempar pengecualian {if (this.isempty ()) {lempar pengecualian baru ("Tidak ada elemen dalam antrian"); } return this.dotake (); }}3. Mencapai pemblokiran sederhana melalui pemungutan suara dan tidur
Paket cn.xf.cp.ch14;/** *Fungsi: Menerapkan pemblokiran sederhana melalui pemungutan suara dan hibernasi *Waktu: 2:55:54 PM *File: SleepyboundedBuffer.java * @Administrator Penulis * *@param <v> */kelas publik Sleepyboundbuffer <v> memperpanjang baseboundbuffer <v> *public class sleepyboundedBuffer <v> memperpanjang baseboundbuffer <v> 2000; publik sleepyboundedbuffer (int kapasitas) {super (kapasitas); } // Saat memasukkan public void put (v v) melempar interruptedException {while (true) {// loop tidak terkunci di sini, jika tidak kunci tidak akan dilepaskan. Jika hibernasi tidak terkunci, tidur terkunci, dan yang lain tidak dapat mengoperasikannya selama hibernasi. Tidak mungkin suatu elemen untuk keluar disinkronkan (ini) {// Jika antrian tidak penuh, maka letakkan elemen jika (! This.isfull ()) {this.doput (v); kembali; }} // Sebaliknya, tidur dan keluar dari CPU untuk menempati thread.sleep (sleep_granularity); }} public v Take () melempar InterruptedException {while (true) {// loop tidak terkunci di sini, jika tidak kunci tidak akan dilepaskan. Jika tidur tidak terkunci, tidur terkunci, dan orang lain tidak dapat mengoperasikannya saat tidur. Tidak akan pernah ada elemen baru yang disinkronkan (ini) {// Jika bagian array kosong, maka data dapat diambil jika (! This.isempty ()) {return this.dotake (); } // Jika antriannya kosong, coba tidur selama beberapa detik lagi} thread.sleep (sleep_granularity); }}}4. Antrian bersyarat
Paket cn.xf.cp.ch14;/** * Fungsi: Gunakan kondisi antrian * Waktu: 3:32:04 PM * File: BoundedBuffer.java * @Administrator Penulis * * @param <V> */Kelas Publik BoundedBuffer <V> Kapasitas (IntendedBuffer (Kapasitas (V> {Public BoundedBuffer (Intends (Intends) {Kapasitas (V> {Public BoundedBuffer (Intends (Intends) {Kapasitas (v> {Public BoundedBuffer (Intends) {Kapasitas) (Int Capasy) {KAPALY; } /** * Masukkan elemen data * @param v * @throws InterruptedException * /public disinkronkan void put (v v) melempar interruptedException {while (this.isfull ()) {// Tangguhkan program di sini dan kuncinya akan dirilis ini.wait (); } // Jika antrian tidak penuh, maka programnya terbangun dan kunci akan kembali ini. Doput (v); // eksekusi berakhir dan membangunkan antrian lain this.notifyall (); } public Synchronized v Take () melempar InterruptException {while (this.isempty ()) {this.wait (); } V v = this.dotake (); this.notifyall (); mengembalikan v; }}Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!