Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 14222|Jawab: 0

[Komunikasi] Wawasan tentang jenis dasar keamanan utas Java dan I++

[Salin tautan]
Diposting pada 05/04/2015 22.17.45 | | |

Di Jawa, variabel dasar lainnya adalah atom, kecuali variabel 8-byte, 64-bit dari Long dan Double.


Model penyimpanan Java mengharuskan operasi get dan store menjadi atomik, tetapi untuk variabel panjang dan ganda yang tidak mudah menguap, JVM memungkinkan pemisahan baca atau tulis 64-bit menjadi dua operasi 32-bit.

Jika baca dan tulis terjadi pada utas yang berbeda, membaca panjang tipe non-volatile dapat menghasilkan 32 bit tinggi dari satu nilai dan 32 bit rendah dari nilai lainnya.

Jadi, meskipun Anda tidak peduli dengan data kedaluwarsa, mungkin tidak aman untuk menggunakan variabel panjang dan ganda yang dibagikan, dapat diubah dalam program multithread kecuali jika mereka dinyatakan tidak stabil, atau dilindungi dengan kunci.


Berbicara tentang operasi atom, itu berarti bahwa membaca dan menulis bersifat atom, seperti i=5; Ini adalah operasi atom.

Namun, jika pengoperasian dua atom dilakukan bersama-sama, belum tentu atom, seperti membaca terlebih dahulu dan kemudian menulis, maka ada kemungkinan variabel tersebut telah dimodifikasi setelah membaca.

i++ adalah operasi seperti itu, baca terlebih dahulu dan kemudian tulis, jadi variabel bilangan bulat adalah atomik, bukan bahwa i++ adalah operasi atom.

Saat Anda menggunakan for(int i=0; i<10000; i++){Sistem.keluar.cetak(i)}

Anda akan menemukan bahwa saya tidak akan mencetak 10.000 pada akhirnya, dan mencetak sekitar 8-9 ribu.


Tetapi dalam kasus multi-threading, bahkan jika variabel bilangan bulat bersifat atom, mungkin ada masalah keamanan utas, yang merupakan masalah visibilitas utas, jadi Anda perlu menambahkan pernyataan volatile.

Pengubah ini adalah variabel paksa yang dibaca dari memori setiap kali dan tidak disimpan dalam register.




Mantan:Permintaan SQL 2008 dengan pesan kesalahan (penyedia: Antarmuka Jaringan SQL, kesalahan: 25 - Kata koneksi).
Depan:[Fast and Furious 7] memulai debutnya DVD 2.12G Versi paling jelas di Internet
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com