Rumah > Java > javaTutorial > teks badan

Apakah Konsistensi \'Berlaku-Sebelum\' dalam Java dan Bagaimana Ia Berfungsi?

DDD
Lepaskan: 2024-10-31 16:41:30
asal
459 orang telah melayarinya

What is

Pemahaman Berlaku-Sebelum Konsisten

Konsep konsistensi berlaku-sebelum dalam Spesifikasi Bahasa Java (JLS) merujuk kepada susunan yang konsisten bagi membaca dan menulis dalam persekitaran berbilang benang.

Definisi Berlaku-Sebelum Konsisten

Satu set tindakan A berlaku-sebelum konsisten jika, untuk setiap bacaan r dalam A dengan W(r) ialah tindakan tulis yang dilihat oleh r:

  • Sama ada hb(r, W(r)) (r berlaku sebelum W(r))
  • Atau tidak wujud tulisan w dalam A sehingga w.v = r.v dan kedua-dua hb(W(r), w) dan hb(w, r) (tiada percanggahan antara r dan w)

Soalan Dijawab

1. Adakah pemahaman anda betul?
Ya, pemahaman anda betul. "Ia sama dengan perkataan berikut: ..., ia adalah kes bahawa baik ... mahupun ..." adalah setara logik bagi definisi formal.

2. Apakah maksud "w.v = r.v"?
w.v dan r.v merujuk kepada nilai pembolehubah yang diakses oleh tulis w dan baca r, masing-masing. Keadaan w.v = r.v bermakna nilai yang dibaca dalam kedua-dua tindakan adalah sama.

3. Apakah yang diwakili oleh nombor kiri dalam perintah pelaksanaan?
Nombor kiri mewakili susunan tindakan dalam kod asal.

4. Adakah pemahaman anda tentang medan tidak menentu betul?
Ya, pemahaman anda betul. Dalam susunan pelaksanaan pertama, kedua-dua r2 dan r1 melihat tulisan awal 0 kerana A dan B ialah medan tidak meruap, membenarkan bacaan tertunda atau tidak konsisten.

5. Adakah situasi (baca lihat tulisan yang berlaku kemudian) wujud di dunia nyata?
Ya, ia boleh wujud. Satu contoh ialah apabila dua utas mengakses data kongsi melalui daftar dan pengoptimuman mereka sendiri menghalang utas bacaan daripada mengesan perubahan yang dibuat oleh urutan penulisan.

6. Bolehkah anda memberikan contoh sebenar?
Pertimbangkan contoh berikut:

Benar 1

<code class="java">volatile boolean running = true;</code>
Salin selepas log masuk

Benar 2

<code class="java">while (running) {
  // Perform task
}</code>
Salin selepas log masuk

Dalam contoh ini, jika pengoptimuman utas bacaan menghalangnya daripada memuatkan nilai larian yang dikemas kini, ia akan terus melihat nilai lapuk dan melaksanakan gelung selama-lamanya, walaupun Thread 1 telah menetapkan berjalan ke palsu.

Atas ialah kandungan terperinci Apakah Konsistensi \'Berlaku-Sebelum\' dalam Java dan Bagaimana Ia Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan